为什么浮点数准确而算术运算却不准确?

时间:2018-07-13 07:10:10

标签: java

为什么浮点数准确而算术运算却不正确?我的意思是编译器不仅将算术运算结果舍入到最接近的数字以表示双精度数字吗?

double a = 0.1;
double b = 0.2;
System.out.println(a);
System.out.println(b);
System.out.println(a + b);

输出;

0.1
0.2
0.30000000000000004

我期望的是

0.10000000000000001
0.20000000000000003
0.30000000000000004

编辑: 这些操作之间有什么区别?

double a = 0.3;
double b = 0.1 + 0.2;
System.out.println(a);   //0.3
System.out.println(b);   //0.300000000000004

1 个答案:

答案 0 :(得分:3)

在转换文字时(例如,使用this转换器),您会看到位表示形式是最精确的。但是,实际储值稍有不同,导致:

0.1 = 1.00000000000000005551115123126E-1
0.2 = 2.00000000000000011102230246252E-1
0.3 = 2.99999999999999988897769753748E-1

正如您所看到的,文字表示的总和的确合计为0.30000000000000004,但不会产生与0.3的文字相同的位模式,因此输出值与0.3的文字。