我正在尝试从字符串中创建一个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
有什么想法吗?
答案 0 :(得分:12)
创建double时,无法准确表示值0.3。您可以从没有中间双精度的字符串创建BigDecimal,如
new BigDecimal("0.3")
浮点数表示为二进制分数和指数。因此,有一些数字无法准确表示。在基数10中存在类似的问题,其数字如1/3,即0.333333333 .....任何1/3的十进制表示都是不精确的。这发生在二进制的不同分数集中,而0.3是二进制不精确的集合之一。
答案 1 :(得分:0)
您可以给指定精度的大小数。例如附加到你的例子:
Double theDouble = new Double(".3");
theBigDecimal = new BigDecimal(theDouble, new MathContext(2));
System.out.println("The Big: " + theBigDecimal.toString());
这将打印出“0.30”
答案 2 :(得分:0)
另一种方法是使用MathContext.DECIMAL32
来保证7位精度(在我们的情况下这已经足够了):
Double theDouble = new Double(".3");
System.out.println("The Double: " + theDouble.toString());
BigDecimal theBigDecimal = new BigDecimal(theDouble, MathContext.DECIMAL32); // <-- here
System.out.println("The Big: " + theBigDecimal.toString());
<强>输出强>
The Double: 0.3
The Big: 0.3000000