Java 比较相等的 double 值但得到错误的结果。程序永远不会结束

标签 java compiler-errors compare double equals

我希望我的数学值在值为 0.8 时中断。但程序继续运行,我没有得到我正在寻找的结果。

double math = 5.0;

while (true) {
    if (math ==  0.8) {
        break;
    }
    math -= 0.2;
    System.out.println (math);
}
System.out.println ("Your math value is done.");

最佳答案

您遇到浮点精度问题。如果您通过调试器运行代码,计算出的值可能不完全是 0.8,而是类似于:0.79999999999999785

您可以尝试在您的条件中定义一个阈值,以便它打破循环。以下是如何执行此操作的示例:

double math = 5.0;

double delta = 0.001;
while (true) {

    if (math > 0.8 - delta && math < 0.8 + delta)
        break;
    math -= 0.2;
    System.out.println(math);
}
System.out.println("Your math value is done.");

舍入误差是计算机中浮点运算的一个“特征”。请参阅此 article 中有关舍入误差的部分.

关于Java 比较相等的 double 值但得到错误的结果。程序永远不会结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46861750/

相关文章:

java - 如何为 Android Room 请求创建通用 AsyncTask

c++ - `static_assert` 和构造函数中的顺序或错误

比较 unsigned char 中的 byte 和 hex,测试文件是否为 ELF 文件

python比较字典的值并丢弃它们

java - Spring 启动 : Issue when importing spring-data-jdbc and spring-data-cassandra together within same project

java - 在使用 System.currentTimeMillis() 的方法中返回 long

java - Java 9 中 'uses' 指令的用途是什么?

java - GUI 框架/按钮

java - StringUtils.isNumeric 是未定义的方法

C#:将文本文件内容与字符串变量进行比较