例如:System.out.println(2.0-1.1)将打印出0.8999999999999999,而不是我们想象的0.9.这种误差主要原因是浮点数据采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10.就好像十进制无法精确地表示1/3一样。如果在数值计算中不允许有任何的舍入误差,就应该使用BigDecimal 类来计算。
public static double calculateDouble(double m1, double m2,String operator){
BigDecimal p1 = new BigDecimal(Double.toString(m1));
BigDecimal p2 = new BigDecimal(Double.toString(m2));
if("+".equals(operator)){
return p1.add(p2).doubleValue();
}
if("-".equals(operator)){
return p1.subtract(p2).doubleValue();
}
if("*".equals(operator)){
return p1.multiply(p2).doubleValue();
}
if("/".equals(operator)){
return p1.divide(p2).doubleValue();
}
return 0d;
}

本文探讨了Java中浮点数运算的精度问题,特别是在二进制系统下无法精确表示十进制分数的情况,如2.0-1.1的结果误差。文章提供了使用BigDecimal类进行精确计算的方法,避免了舍入误差。
11万+

被折叠的 条评论
为什么被折叠?



