考虑到BigDecimal(double)
的行为是正确的,在我看来,我不太确定它真的会出现这样的问题。
我不会正好与在BigDecimal(double)
构造的文件的措辞达成一致:
此构造方法的结果可能会有所 不可预知。有人可能会 认为用Java编写new BigDecimal(0.1)
创建 BigDecimal
这正好等于 0.1
(的1
未测量的值,用1
规模),但它实际上等于 是 0.1000000000000000055511151231257827021181583404541015625
。
(着重号。)
与其说不可预知,我觉得写法应该是意外,即使如此,这将是对于那些谁不知道的局限性,意外行为用floating point values表示十进制数字。
只要记住浮点值不能精确地表示所有十进制值,使用BigDecimal(0.1)
即0.1000000000000000055511151231257827021181583404541015625
返回的值实际上是有意义的。
如果由BigDecimal(double)
构造函数实例化的对象BigDecimal
是一致的,那么我会争辩说结果是可预测的。
我为什么不推荐使用BigDecimal(double)
构造函数是因为行为可以被认为是正确的,并且只要知道浮点表示如何工作,构造函数的行为就不足为奇了。
好点,它就像一个毫无戒心的开发者的地雷。长远来看,地雷从来不会为任何人服务......这就是为什么JSR我猜... – 2009-06-29 05:59:30