5

文字列から BigDecimal を作成しようとしています。理由は聞かないでください。ただ必要なだけです。これは私のコードです:

Double theDouble = new Double(".3");
System.out.println("The Double: " + theDouble.toString());
BigDecimal theBigDecimal = new BigDecimal(theDouble);
System.out.println("The Big: " + theBigDecimal.toString());

これは私が得る出力ですか?

The Double: 0.3
The Big: 0.299999999999999988897769753748434595763683319091796875

何か案は?

4

3 に答える 3

12

double を作成する場合、値 0.3 を正確に表すことはできません。次のように、中間の double なしで文字列から BigDecimal を作成できます。

new BigDecimal("0.3")

浮動小数点数は、2 進数の小数と指数として表されます。そのため、正確に表現できない数があります。0.333333333 である 1/3 のような数の 10 進法にも同様の問題があります。1/3 の 10 進数表現は不正確です。これは、2 進数の分数の異なるセットで発生し、0.3 は 2 進数で不正確なセットの 1 つです。

于 2010-09-11T23:04:10.690 に答える
0

大きな 10 進数に指定された精度を与えることができます。たとえば、例に追加します:

Double theDouble = new Double(".3");
theBigDecimal = new BigDecimal(theDouble, new MathContext(2));
System.out.println("The Big: " + theBigDecimal.toString());

これにより、「0.30」が出力されます

于 2010-09-11T23:09:53.937 に答える