你如何使用double来获得预期的结果

时间:2015-08-22 09:01:36

标签: java casting type-conversion floating-point-precision double-precision

我试图在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来纠正它?

1 个答案:

答案 0 :(得分: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可以帮助你确定你应该在什么时候这样做。