【问题标题】:Incorrect subtraction results: 3.999999, not 4 [duplicate]不正确的减法结果:3.999999,而不是 4 [重复]
【发布时间】:2014-01-28 14:20:46
【问题描述】:

所以我将应用程序中的一个错误缩小到 java 搞乱了一个简单的减法计算。我无法弄清楚为什么。这是一段代码:

    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 所以 count = 7”。我知道在那个时候将 (x*20) 转换为 int 会给我 7,但我的问题是为什么 x 不等于 0.4 。

【问题讨论】:

标签: java int double rounding


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    实际上,您的“x”确实等于 0.4,这只是精度问题。
    所有浮点比较操作都应该以一定的精度执行(在某些实现中是 delta 或 epsilon)。

    请参阅this post

    【讨论】:

      猜你喜欢
      • 2016-05-02
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 2013-10-05
      相关资源
      最近更新 更多