【问题标题】:How to properly calculate rational by using BigDecimal如何使用 BigDecimal 正确计算有理数
【发布时间】:2021-12-07 03:23:05
【问题描述】:

当我需要使用 BigDecimal 时如何在不损失精度的情况下获得正确答案。

BigDecimal a = new BigDecimal(0.5);
BigDecimal b = new BigDecimal(30);
BigDecimal c = new BigDecimal(18000);

a.divide(b).multiply(c);

在这种情况下,我怎样才能得到准确的 300?

谢谢!

【问题讨论】:

  • 只需重新排列方程,因为四舍五入会丢失精度c.divide(b).multiply(a) ==> 300.0
  • 或者您可以在 github 上找到并使用其中一个 BigRational 类。

标签: java precision bigdecimal


【解决方案1】:

您可以为此使用divide 方法中的MathContext 参数。

例如,a.divide(b, MathContext.DECIMAL128).multiply(c); 将为您提供所需的精度(误差幅度为 1e-32)。如果您不想丢失任何精度,可以使用MathContext.UNLIMITED,但这会导致非终止的十进制扩展。

具体而言,您还可以尝试重写等式以防止发生任何舍入:a / b * c = c / b * a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-13
    • 2013-12-25
    • 1970-01-01
    • 2014-06-06
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多