new BigDecimal("37146555.53880000").divide(new BigDecimal("1000000")).scale()
返回10
。但根据API,divide
方法:
返回值为的BigDecimal (这/除数),谁的首选 比例是(this.scale() - divisor.scale());
因此,在这种情况下,37146555.53880000's
比例为8
,1000000
的比例为0
。因此,结果的比例应为8
,而不是10
。
我在这里缺少什么?
由于
答案 0 :(得分:4)
实际结果为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 ......),这可能很有用,因为如果发生这种情况,简单的除法会引发异常。将其限制为最大小数位数将帮助您避免异常,但会使您的计算不那么精确。
答案 1 :(得分:1)
这些尺度是由 返回精确算术的方法 结果; 除了确切的分歧 可能必须使用更大的比例 确切的结果可能有更多的数字。 例如,1/32是0.03125。
答案 2 :(得分:0)
它说“首选规模”并非“绝对是规模”。
绝对确定,我会使用BigDecimal.divide(BigDecimal, int, int)
。