关于java:减法结果不正确:3.999999,而不是4

Incorrect subtraction results: 3.999999, not 4

本问题已经有最佳答案,请猛点这里访问。

因此,我将应用程序中的错误缩小为Java弄乱了简单的减法计算。我不知道为什么。这是代码的一部分:

1
2
3
4
5
6
7
8
9
10
11
    for (double x = (((double)bdl.length())-1)/10; x > 0; x--) {
            int count;
            System.out.println("x =" + x);
            if (x >= 1) {
                System.out.println("X =" + x +" so count = 20");
                count = (20);
            } else {
                count = (int)(x*20);
                System.out.println("X =" + x +" so count ="+count);
            }
    }

变量bdl只是一个JSONArray,目前我只关心它的长度。由于bdl最初具有长度15,所以x等于1.4。第一次通过循环,第一个println会说" X = 1.4,所以count = 20 ",这是正确的。但是,第二次通过x应= 0.4时,它改为说" X = 0.3999999999999999,所以计数= 7"。我知道在那个时间点将(x * 20)转换为int会给我7,但是我的问题是为什么x不等于0.4。


您正在使用double,这是一个浮点数。这不是为了精确,而是为了速度和非精确。因此,您应该使用int,如下所示:

1
for (int x = ((bdl.length())-1)/10; x > 0; x--) {

这将使您的数字保持准确。


实际上,您的" x"等于0.4,仅是精度问题。

所有浮点比较操作应以一定的精度(在某些实现中为δ或epsilon)执行。

请参阅此帖子。