【发布时间】:2009-01-20 10:36:26
【问题描述】:
Java 的BigDecimal 怎么会这么痛?
Double d = 13.3D;
BigDecimal bd1 = new BigDecimal(d);
BigDecimal bd2 = new BigDecimal(String.valueOf(d));
System.out.println("RESULT 1: "+bd1.toString());
System.out.println("RESULT 2: "+bd2.toString());
RESULT 1: 13.300000000000000710542735760100185871124267578125
RESULT 2: 13.3
是否存在需要结果 1 的情况?我知道 Java 1.5 更改了 toString() 方法,但这是预期的结果吗?
我也意识到BigDecimal 有doubleValue() 等,但我正在使用的库有用地使用toString(),我无法更改它:-(
干杯。
【问题讨论】:
-
其实 toString() 版本可能就是你想要的。十进制数不能正确地表示为双精度数,虽然 BigDecimals 解决了这个问题,但在构造函数中给它们一个双精度数会破坏解决方案,因为它们没有一个准确的数字作为起点。
标签: java precision bigdecimal