swc*_*wch 5 java floating-point numbers
我想知道为什么 Java 中的浮点数在初始化为文字时可以表示精确的值,但是当它们表示某些计算的结果时它们是近似值。例如:
double num1 = 0.3;
double num2 = 0.1 + 0.2;
System.out.println(num1);
System.out.println(num2);
Run Code Online (Sandbox Code Playgroud)
为什么结果是:
0.3
0.30000000000000004
Run Code Online (Sandbox Code Playgroud)
并不是:
0.30000000000000004
0.30000000000000004
Run Code Online (Sandbox Code Playgroud)
当没有 0.3 的精确二进制表示时。我知道 BigDecimal 类,但我不太了解这种原始数字不一致。
这三个数字都不能完全表示为 a double。得到不同结果的原因是添加0.1到后的值0.2具有与 不同的表示错误0.3。大约 5.5E-17 的差异足以在打印结果时造成差异(演示)。
double a = 0.2;
double b = 0.1;
double c = 0.3;
double d = a+b;
double e = d-c; // This is 5.551115123125783E-17
Run Code Online (Sandbox Code Playgroud)