【发布时间】:2017-07-26 11:17:15
【问题描述】:
我试图了解 BigDecimal 的比例,但它的行为很奇怪,我不明白为什么。举几个例子:
Double d = new Double(1000000d);
int scale = new BigDecimal(d.toString()).scale();
此示例中的比例为 1,这对我来说是正确的。 d.toString() 的结果是“1000000.0”。
Double d = new Double(10000000d);
int scale = new BigDecimal(d.toString)).scale();
本例中的比例为 -6。谁能解释为什么? d.toString() 的结果是“1.0E7”。
我以为是位数引起的,但如果我去:
Double d = new Double(11111111d);
int scale = new BigDecimal(d.toString()).scale();
预期为 -8,但突然变为 0。 d.toString() 的结果是“1.1111111E7”。
阅读 scale() 的 Javadoc 后,这些不同的比例对我来说毫无意义:
返回此 BigDecimal 的小数位数。如果为零或正数,则刻度是小数点右侧的位数。如果为负数,则将数字的未缩放值乘以 10 的负数次方。例如,-3 的比例表示未缩放的值乘以 1000。
我非常感谢您解释 BigDecimal 在数字很大时的行为方式。
提前致谢!
【问题讨论】:
-
在将
d.toString()的值传递给new BigDecimal之前检查它的值。它可能没有您认为的价值。 -
为示例添加了 d.toString() 的结果,但对我没有多大帮助。
标签: java math bigdecimal