我试图在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)
我建议你使用适当的舍入。
System.out.printf("%.1f%n", n);
当你打印双人时,你必须考虑适当的回合是什么。
您还可以在计算BigDecimal所做的事情时对结果进行舍入。
n = n - 0.10;
n = Math.round(n * 10) / 10.0;
这将减少累积误差。
另一种方法是在不同的单位工作,例如而不是美元,你使用美分。这意味着您可以使用int
或long
并仅转换
美元用于演示。
long n = 100;
for(int i = 0; i < 10; i++) {
System.out.println(n / 100.0);
n = n - 10;
}
1.0
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
注意:即使你使用BigDecimal,这仍然必须这样做,除了API可以帮助你确定你应该在什么时候这样做。