gpt4 book ai didi

java - 如何避免 Java 中浮点型或 double 型的浮点精度错误?

转载 作者:太空宇宙 更新时间:2023-11-04 14:05:20 25 4
gpt4 key购买 nike

我在 Java 中遇到了一个非常烦人的问题,即 float 或 double 的长和。基本上的想法是,如果我执行:

for ( float value = 0.0f; value < 1.0f; value += 0.1f )
System.out.println( value );

我得到的是:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

我知道 float 精度误差存在累积,但是如何消除它?我尝试使用 double 将错误减半,但结果仍然相同。

有什么想法吗?

最佳答案

没有将 0.1 精确表示为 floatdouble。由于此表示错误,结果与您的预期略有不同。

您可以使用的几种方法:

  • 使用double类型时,仅显示您需要的位数。检查相等性时,无论哪种方式都允许有较小的容差。
  • 或者使用允许您存储要准确表示的数字的类型,例如 BigDecimal 可以准确表示 0.1。

BigDecimal 的示例代码:

BigDecimal step = new BigDecimal("0.1");
for (BigDecimal value = BigDecimal.ZERO;
value.compareTo(BigDecimal.ONE) < 0;
value = value.add(step)) {
System.out.println(value);
}

在线查看:ideone

关于java - 如何避免 Java 中浮点型或 double 型的浮点精度错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28922141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com