java中为什么两个浮点数相加结果不符合预期

2025-05-21 00:07:48
推荐回答(1个)
回答(1):

我想你说的是java中的浮点数经过计算后,显示的结果是带有很多0的形式吧。这要从浮点数的概念讲起。在Java中float和double类型的数据,无法精确表示计算结果。这是由于float和double是不精确的计算。
例:
System.out.println(0.05+0.01);
System.out.println(1.0-0.42);
System.out.println(4.015*100);
System.out.println(123.3/100);
System.out.println(0.05);
得到如下结果:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
这是计算机从从本质上讲只能接收1和0,从二进制转为十进制浮点数时,是无论如何也没法精确保存的,因为浮点数实际上只是个近似值。在进行运算后,浮点数的精度就会进一步下降。
要保证精确计算,应使用BigDecimal类。例如
BigDecimal bd3=new BigDecimal(String.valueOf(0.05));

BigDecimal bd4=new BigDecimal(String.valueOf(0.01));

System.out.println((bd3.add(bd4)).doubleValue());