为什么当我们总和五次 0.1 时,不能用double精确表示,结果是 0.5 ?很清楚,手动添加双倍值 0.1000000000000000055511151231257827021181583404541015625 五次不会导致 0.5 。做相同的总和,三次不会导致 0.3 。是否会发生这种情况,因为 0.5 可以准确表示, 0.3 可以&#t; t?
System.out.println(new BigDecimal(0.1));
System.out.println(new BigDecimal(0.1 + 0.1 + 0.1 + 0.1 + 0.1));
System.out.println(new BigDecimal(0.5));
System.out.println(new BigDecimal(0.1 + 0.1 + 0.1));
System.out.println(new BigDecimal(0.3));
输出:
0.1000000000000000055511151231257827021181583404541015625
0.5
0.5
0.3000000000000000444089209850062616169452667236328125
0.299999999999999988897769753748434595763683319091796875