我有一个很烦人的问题,Java中的浮点数或双精度数很长。基本上的想法是,如果我执行:
for ( float value = 0.0f; value < 1.0f; value += 0.1f ) System.out.println( value );
我得到的是:
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.70000005 0.8000001 0.9000001
我了解到,浮动精度误差会不断累积,但是,如何消除这种误差呢?我尝试使用双精度模式将错误减半,但结果仍然相同。
有任何想法吗?
没有精确表示为0.1的a float或double。由于此表示错误,结果与你期望的结果略有不同。
float
double
你可以使用以下两种方法:
BigDecimal
BigDecimal step = new BigDecimal("0.1"); for (BigDecimal value = BigDecimal.ZERO; value.compareTo(BigDecimal.ONE) < 0; value = value.add(step)) { System.out.println(value); }