java - 为什么 BigInteger 除法时要减去小数位数,乘法时要加上小数位数?

标签 java division bigdecimal bignum

我正在尝试使用不断增加的分母来准确且精确地操纵数据。

请假设分子始终有小数。

我在 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/

相关文章:

经过太多的划分后,Python 将变为 0.0

c - 为什么我的产品在划分时不显示完整答案

biginteger - 如何计算 BigDecimal 中的数字?

java - 生成pi到第n位java

java - 在java中获取 token 的最佳方式

java - JSP Maven 应用程序的类似 Rails 的 Assets 管道解决方案?

Java 8 DateTimeFormatterBuilder().appendOptional 不工作

c - 为什么用 float 除以 10 的幂不如直接输入数字准确?

java - 对于大输入,小数扩展程序运行速度非常慢

java - 不兼容类型 : int and <nulltype>