我需要在 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 微调器小部件 输出的值的范围。
Java 中的浮点运算似乎引入了一些意想不到的错误。例如,我得到 2.180000000000001 而不是 2.18。浮点数有什么用你不能相信对它们执行的算术结果?我怎样才能解决这个问题?
原文由 user63904 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您需要精确的 十进制 值,您应该使用
java.math.BigDecimal
。然后阅读 “每位计算机科学家应了解的浮点运算知识” ,了解您获得这些结果的背景。(我有一篇以 .NET 为中心的文章,您可能会发现它更容易阅读 - 当然更短。Java 和 .NET 之间的区别对于理解这个问题来说大多无关紧要。)