Java 分割大小数时,保留中间结果的最大精度

Java 分割大小数时,保留中间结果的最大精度,java,precision,division,bigdecimal,Java,Precision,Division,Bigdecimal,在返回最终结果之前,我使用BigDecimal进行了两次计算。我的计算包括两部分。我知道调用divide()时应该定义一个缩放和舍入模式。但是,由于我使用的是货币,我希望尽可能长时间保持最大精度,并且只将最终结果四舍五入到小数点后两位 为了获得最高精度,我应该对中间结果应用什么比例和舍入模式?通常在物理学中,我们对中间结果多取一位数。我认为对您的问题的任何具体回答都可能需要进一步详细说明您需要的最终结果的准确性,尤其是当你在最后四舍五入的时候 我个人会尝试完全消除这个问题,并使用某种形式的Rat

在返回最终结果之前,我使用
BigDecimal
进行了两次计算。我的计算包括两部分。我知道调用
divide()
时应该定义一个缩放和舍入模式。但是,由于我使用的是货币,我希望尽可能长时间保持最大精度,并且只将最终结果四舍五入到小数点后两位


为了获得最高精度,我应该对中间结果应用什么比例和舍入模式?

通常在物理学中,我们对中间结果多取一位数。

我认为对您的问题的任何具体回答都可能需要进一步详细说明您需要的最终结果的准确性,尤其是当你在最后四舍五入的时候

我个人会尝试完全消除这个问题,并使用某种形式的
Rational
对象


可能会有所帮助。

让我们假设,你做了类似(a/b)/c的事情

我不会先计算(a/b)。我宁愿把它重组为

a/(b*c)

这不仅使中间舍入变得不必要,而且更为理想

(a/b)/c=a/(b*c)

证明:


(a/b)/c=(a*b^-1)*c^-1=a*(b^-1*c^-1)=a*1/(b*c)=a/(b*c)

我发现了一个有用的网站,上面有使用BigDecimal提供精度的示例、解释和结果。这本书读起来很快

它显示了执行计算的各种方式,并提供了清晰的示例:


我希望它能有所帮助。

除非您需要超过15位的精度,否则我将使用
双精度
,并在最后对结果进行四舍五入。使用
double
编码更简单,速度更快。这听起来很合理。这是一种聪明的方法。非常感谢。