我需要在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小部件作为输出给出的值的范围。
Java中的浮点算术似乎引入了一些意外错误。例如,我得到2.180000000000001而不是2.18。浮点数有什么用,您不相信对它们执行的算术结果吗?我该如何解决这个问题?
如果您需要精确的十进制值,则应使用java.math.BigDecimal。然后阅读“每个计算机科学家应该知道的有关浮点运算的知识”,以了解获得这些结果的背景。
(我有一本以.NET为中心的文章,您可能会觉得它更容易阅读,并且肯定会更短。出于理解此问题的目的,Java和.NET之间的差异在很大程度上无关紧要。