第一次面试总结
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一.十个Double类型的数据相加会出现什么问题,你是怎么解决的
是一个考我Java基础的题目
问题如下:
public class Test2 {
public static void main(String[] args) {
double a = 1.02;
double b = 2.08;
for (int i = 0; i < 30; i++) {
System.out.println(a+i*b);
}
}
}
输出结果:
34.300000000000004
36.38
38.46
40.540000000000006
42.620000000000005
44.7
46.78000000000001
48.86000000000001
50.940000000000005
原因:这种情况是因为我们的数据在计算内部存储的是2进制(不论在内存还是cpu的寄存器内)的,其表示小数的时候更具不同的系统,不同的环境都是有一定差异的。
解决方法:做float或double运算的时候 建议使用BigDecimal 来处理~
public class Test2 {
public static void main(String[] args) {
double a = 1.02;
double b = 2.08;
BigDecimal a1 = new BigDecimal(Double.toString(a));
BigDecimal b1 = new BigDecimal(Double.toString(b));
for (int i = 0; i < 30; i++) {
System.out.println(a1.add(b1));
a1=a1.add(b1);
}
}
}
得到的结果很精确:
3.10 5.18 7.26 9.34 11.42 13.50 15.58 17.66 19.74 21.82 23.90 25.98 28.06 30.14 32.22 34.30 36.38 38.46 40.54 42.62 44.70 46.78 48.86 50.94 53.02 55.10 57.18 59.26 61.34 63.42
结论:处理flout和double数据的运算时,一定要注意!