new BigDecimal("37146555.53880000").divide(new BigDecimal("1000000")).scale()
这返回10
。但根据API,divide
method:
返回一个 BigDecimal,其值为
(这个/除数),以及谁的首选
比例尺是 (this.scale() -
除数.scale());
所以在这种情况下,37146555.53880000's
规模是8
, and 1000000
的规模是0
。所以结果应该有一个规模8
, not 10
.
我在这里缺少什么?
Thanks
实际结果是 37.1465555388,其小数位数必须为 10 才能准确。
JavaDoc 所说的是首选比例是差异,这意味着如果结果实际上不需要为 10,那么它会尝试将其变为 8。例如,如果您除以 2,其比例也是 0 ,结果将是 18573277.76940000(比例 8)。
编辑:小加法 - 您可以通过使用重载的除法方法强制除法到一定范围:
-
divide(BigDecimal, RoundingMode)
这将给BigDecimal
规模为this
如果结果实际上需要更多小数才能准确,则使用指定的舍入方法对值进行舍入。
-
divide(BigDecimal, scale, RoundingMode)
这将给BigDecimal
具有指定的比例,并根据需要按指定的方法舍入值。
如果您除以一个您知道会导致重复小数的数字,例如 3 (1/3 = 0.333333...),这可能很有用,因为如果发生这种情况,简单的除法将引发异常。将其限制为最大小数位数将帮助您避免异常,但会使您的计算不太精确。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)