2016-04-26 10 views
1

BigDecimal値で小数点以下の桁数を取得しようとしています。私は出力以下になっています、これを使用してbigdecimalから正確な10進数値を得る方法

BigDecimal big = new BigDecimal(1231235612.45); 
    String[] str = big.toPlainString().split("\\."); 

    System.out.println(" Decimal Value: " + str[1]); 

- 10進値:4500000476837158203125。 実際には、元のBigDecimal値(1231235612.45)につき、のみ45と表示したいと思います。 したがって、私の期待される出力は小数値:45です。 しかし、変換中は小数点以下の桁数が増えます。 BigDecimalからまったく同じ値を取得するメソッドやコードはありますか?

+0

を使用します。代わりに 'STRING'コンストラクタを使用しています。 – Tunaki

+0

'BigDecimal.valueOf(1231235612.45);'または 'new BigDecimal(" 1231235612.45 ");' –

答えて

2

BigDecimalのdoubleコンストラクタを使用しないでください(Javadocを参照してください)。

使用Stringコンストラクタ

new BigDecimal("1231235612.45"); 

またはかいつまんたMathContext

new BigDecimal(1231235612.45, MathContext.DECIMAL64); 
+2

@Nilesh doubleコンストラクタを使用しない理由は、1231235612.45が64ビットのdoubleに入れられるためです。有限のビット数で正確に表現します。数字1231235612.4500000476837158203125が最も近いビットです。値を1ビット変更すると、1231235612.45未満の数値が生成されますが、表示されている数値に近い数値にはなりません。 – FredK

関連する問題