最佳答案
我知道 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呢?