BigDecimal 中 Divide 方法的 Scale()

2024-05-27

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(使用前将#替换为@)

BigDecimal 中 Divide 方法的 Scale() 的相关文章

随机推荐