最佳答案
我知道 0.1
十进制数不能精确地用有限的二进制数(解释)来表示,所以 double n = 0.1
会失去一些精度,不能精确地表示为 0.1
。另一方面,0.5
可以精确地表示,因为它是 0.5 = 1/2 = 0.1b
。
说了这么多,可以理解,加入 0.1
三次不会得到完全的 0.3
,所以下面的代码打印出 false
:
double sum = 0, d = 0.1;
for (int i = 0; i < 3; i++)
sum += d;
System.out.println(sum == 0.3); // Prints false, OK
但是为什么加上 0.1
五次就能得到 0.5
呢? 下面的代码打印出 true
:
double sum = 0, d = 0.1;
for (int i = 0; i < 5; i++)
sum += d;
System.out.println(sum == 0.5); // Prints true, WHY?
如果 0.1
不能精确地表示,那么将它加5次怎么能得到精确地表示的 0.5
呢?