2017-04-11 1 views
-3

BigDecimal()を使用してStringをBigDecimalに変換しようとすると、 '45e57'のような文字列は4.5E + 57に変換されます。Stringに 'e'が含まれている場合に文字列をBigDecimalに変換するJava

//」は、テキストが「e」を含んでいる場合、今、私はエラーを投げていますのよう

BigDecimal textToBigDecimal = null; 
try 
{ 
    if (!textToBigDecimal.contains("e") && !textToBigDecimal.contains("E")) 
    { 
     textToBigDecimal = new BigDecimal(text); 
    } 
} 
catch (NumberFormatException ignored) 
{ 
} 

入力する「テキスト」を前提としています。私はチェックをスキップする回避策があるのだろうかと思います。文字列に数字だけを変換する必要があります。文字列に他の文字が含まれている場合は、変換が行われません。

+2

私は理解できなかった、何が問題ですか?あなたはあなたのコードとあなたが得るすべての例外の完全なスタックトレースを共有できますか? – BackSlash

+1

あなたが何を求めているのかははっきりしていません。特に「例外をスローしないでください」ということは、例外をスローすることを望んでいるのですか? [mcve]は、あなたを助けることをはるかに容易にします。 –

+0

'新しいBigDecimal(" 45e57 ")'は4.5E + 58に変換されますが正しいです!何を防止したいですか?達成するものは何ですか? – Harmlezz

答えて

0

'45e57'のような文字列に対して例外がスローされるようにするには、BigDecimalを構築する前に、例えばLong.parseLong("43e57")を使用できます。それはスローされますNumberFormatException

+1

与えられた文字列の中に 'e'があるかどうかをチェックできるのはなぜでしょうか? – BackSlash

+0

これらの文字列値に 'e'以外の何かが含まれているかどうかはわかりません。しかし、この質問にはさらに詳しい記述が必要です。文字列値の種類はどれですか? – Lennier

+0

Trueですが、それ以外の場合は 'BigDecimal'が例外をスローします。 'long'と' BigDecimal'との唯一の違いは 'BigDecimal'が' E'を受け入れないということです。この場合、 'E'をチェックするだけです。 – BackSlash

関連する問題