-1

我尝试在java中减去的数字,这一点让我意外的结果你如何使用双来获得期望的结果

public class FloatWeird 
{ 
    public static void main(String[] args) 
    { 
     double n = 1; 

     for(int i = 0;i<10;i++) 
     { 
      System.out.println(n); 
      n = n - 0.10; 
     } 

    } 
} 

结果

1.0 
0.9 
0.8 
0.7000000000000001 
0.6000000000000001 
0.5000000000000001 
0.40000000000000013 
0.30000000000000016 
0.20000000000000015 
0.10000000000000014 

我已经通过一些论坛上消失了并明白使用BigDecimal类是一种解决方案。然而,有没有一种方法可以使用double来更简单地修正它?

+0

这些数字代表什么?假设它们代表您需要用来制作鸡尾酒的杜松子酒的量。如果你增加百万分之一十亿分之一升超过需要,真的很重要吗? –

+0

恕我直言,这不是重复的,因为OP特别声明他们知道使用BigDecimal的替代方案。 –

回答

0

我建议你使用适当的四舍五入。

System.out.printf("%.1f%n", n); 

当你打印一张双面图时,你必须考虑合适的圆是什么。

您也可以在计算BigDecimal的作用时舍入结果。

n = n - 0.10; 
n = Math.round(n * 10)/10.0; 

这会减少累积误差。

另一种方法是在不同的单元中工作,例如,你用美分代替美元。这意味着您可以使用intlong,并且只能将 转换为美元才能显示。

long n = 100; 
for(int i = 0; i < 10; i++) { 
    System.out.println(n/100.0); 
    n = n - 10; 
} 

此打印http://ideone.com/Uf70jC

1.0 
0.9 
0.8 
0.7 
0.6 
0.5 
0.4 
0.3 
0.2 
0.1 

注意:即使你使用BigDecimal的,这个还是要做到这一点,除了API可以帮助你确定你应该做这哪一点。

+1

https://www.youtube.com/watch?v=PZRI1IfStY0 http://floating-point-gui.de/basic/ –

相关问题