Java BigDecimal中除法的Scale()
这将返回Java BigDecimal中除法的Scale(),java,formatting,bigdecimal,Java,Formatting,Bigdecimal,这将返回10。但是根据API,divide方法: 返回一个值为的BigDecimal (此/除数),以及谁的首选项 比例是(this.scale()- 除数。比例() 所以在这种情况下,37146555.53880000的比例是8,而1000000的比例是0。因此,结果的刻度应为8,而不是10 我错过了什么 谢谢上面写的是“首选量表”,而不是“肯定会是量表” 可以肯定的是,我会使用 这些天平是工程师们使用的 返回精确算法的方法 结果除了一个精确的除法 可能需要使用更大的比例尺,因为 确切的结果可
10
。但是根据API,divide
方法:
返回一个值为的BigDecimal
(此/除数),以及谁的首选项
比例是(this.scale()-
除数。比例()
所以在这种情况下,37146555.53880000的比例是8
,而1000000
的比例是0
。因此,结果的刻度应为8
,而不是10
我错过了什么
谢谢上面写的是“首选量表”,而不是“肯定会是量表”
可以肯定的是,我会使用
这些天平是工程师们使用的
返回精确算法的方法
结果除了一个精确的除法
可能需要使用更大的比例尺,因为
确切的结果可能有更多的数字。
例如,1/32是0.03125
实际结果是37.146555388,其刻度必须为10才能精确
JavaDoc所说的是,首选的刻度是不同的,这意味着如果结果实际上不需要是10,那么它会尝试将其设为8。例如,如果除以2,其比例也为0,则结果将为18573277.76940000(比例8)
编辑:小平差-可以使用重载的除法将除法强制到一定的比例:
divide(BigDecimal,RoundingMode)
将给出一个比例尺为this
的BigDecimal
,如果结果实际上需要更多的小数才能精确,则使用指定的舍入方法对值进行舍入
divide(BigDecimal,scale,RoundingMode)
将给出一个具有指定比例的BigDecimal
,如果需要,可以使用指定方法对值进行四舍五入
如果你除以一个你知道的数字会导致重复的小数,比如3(1/3=0.333333…),这可能很有用,因为如果发生这种情况,简单的除法会抛出一个异常。将其限定为最大小数位数将有助于避免异常,但会降低计算精度。如果此.scale()值小于除数.scale(),那么?
new BigDecimal("37146555.53880000").divide(new BigDecimal("1000000")).scale()