在Javascript中:
此表达式(2.0 - 1.1)返回0.8999999999999999。
然而这一个(4.0 - 1.1)返回2.9。
有人可以解释这种不一致吗?
我知道1.1不能用浮点表示。
答案 0 :(得分:4)
“不一致”与浮点减法无关,而是Javascript显示数字的结果(它也完全一致)。
正如你所说,1.1
是不可表示的,所以它的值实际上不是1.1。相反,它具有值:
1.100000000000000088817841970012523233890533447265625
从2.0
中减去这个值是完全正确的,结果是:
0.899999999999999911182158029987476766109466552734375
此数字不是与0.9
最接近的可表示数字(即0.90000000000000002220446049250313080847263336181640625
),因此如果打印为0.9
,则该值将无法在往返十进制和返回(能够将数字往返十进制表示并返回是一个非常理想的属性)。因此,它以足够的精度打印,以指定正确的值:
0.8999999999999999
在您的第二个示例中,我们从4.0
中减去并得到:
2.899999999999999911182158029987476766109466552734375
与2.9
最接近的可表示的数字(下一个最接近的数字是2.9000000000000003552713678800500929355621337890625
),因此它可以打印为2.9
但仍然有价值在往返过程中存在。