我正在尝试使用不断增加的分母来准确且精确地操纵数据。
请假设分子始终有小数。
我在 docs 中看到divide(BigDecimal divisor)
实际上会减少比例,这看起来很奇怪,因为据我了解“比例”的用法,即小数点后的位数,它应该在除法时增加。
我也在 docs 中看到multiply(BigDecimal multiplicand)
会增加比例。根据我对比例的理解,这也没有意义,因为两个相乘的数字需要小数点以外的数字的可能性会下降。
文档中是否有这些拼写错误?
如果不是,我对比例的理解是否不正确?
如果不是,如何通过不断增加的分母(增加小数点后的位数)来保持精度?
最佳答案
这实际上只是 scientific notation 。正如文档中所述,BigDecimal
的值是:
unscaledValue × 10^(-scale)
因此,将两个 BigDecimal
相乘相当于将它们的 unscaledValue
相乘并添加它们的 scale
:
a * b
== (uA * 10^-sA) * (uB * 10^-sB)
== (uA * uB) * 10^-(sA + sB)
关于java - 为什么 BigInteger 除法时要减去小数位数,乘法时要加上小数位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21368986/