昨晚看书,书中有这样一句代码:System.out.println(2.00-1.10); //数据结果理论上因为0.90控制台结果理论上因为0.90,但实际输出确实:0.8999999999999999!
我以为是没有声明为DOUBLE类型的原因,就把代码改了下但是结果还是一样:double num_1 = 2.00;
double num_2 = 1.10;
System.out.println(num_1-num_2);
看书中的解释,因为是英译中(我都怀疑是用GOOGLE翻译的),有点晦涩!
所以在这里求牛人!
我以为是没有声明为DOUBLE类型的原因,就把代码改了下但是结果还是一样:double num_1 = 2.00;
double num_2 = 1.10;
System.out.println(num_1-num_2);
看书中的解释,因为是英译中(我都怀疑是用GOOGLE翻译的),有点晦涩!
所以在这里求牛人!
需要在计算中不含有任何舍入误差,就应该使用BigDecimal类。
将一个类标记为strictfp ,那么这个类中的所有方法都要使用严格的浮点数计算,
将一个方法标记为strictfp,那么这个方法就会使用严格的浮点数计算,
public static strictfp void main(String [] args)
double num_1 = 2.00;
double num_2 = 1.10;
System.out.println((num_1*1000-num_2*1000)/1000);输出 0.9
我们以后在计算的时候是用bigdecimal还是用double呢!或者说转换成整数计算!
int j = (int) Math.round(d * 10); // 小数点后两位前移,并四舍五入
double k = (double) j / 10.0; // 还原小数点后两位
就好了
就好了
就好了