java – 浮点运算不产生精确的结果[重复]

这个问题已经有一个答案在这里:            >            Is floating point math broken?                                    29个答案                            我需要在Java中做一些浮点算术,如下面的代码所示:

public class TestMain {
    private static Map<Integer, Double> ccc = new HashMap<Integer, Double>() {
      { put(1, 0.01); put(2, 0.02); put(3, 0.05); put(4, 0.1); put(6, 0.2);
        put(10, 0.5); put(20, 1.0); put(30, 2.0); put(50, 5.0); put(100, 10.0);
      }
    };

    Double increment(Double i, boolean up) {
        Double inc = null;

        while (inc == null) {
            inc = ccc.get(i.intValue());

            if (up)
                --i;
            else
                ++i;
        }
        return inc;
    }

    public static void main(String[] args) {
        TestMain tt = new TestMain();

        for (double i = 1; i < 1000; i += tt.increment(i, true)) {
            System.out.print(i + ",");
        }
    }
}

这是为了模拟由Betfair spinner widget输出的值的范围。

Java中的浮点运算似乎引入了一些意想不到的错误。例如,我得到2.180000000000001而不是2.18。浮点数是什么用,你不能信任对它们进行算术的结果?我如何解决这个问题?

如果您需要精确的十进制值,则应使用java.math.BigDecimal。然后阅读“What Every Computer Scientist Should Know About Floating-Point Arithmetic”为什么你得到这些结果的背景。

(我有一个.NET-centric article,你可能会更容易阅读 – 而且肯定更短。Java和.NET之间的区别大多与理解这个问题无关。)

http://stackoverflow.com/questions/1661273/floating-point-arithmetic-not-producing-exact-results

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 浮点运算不产生精确的结果[重复]