JS中为什么1.2*3等于3.5999996

如题所述

根本原因是因为计算机内部处理数据的形式是二进制的。

举个例子
1/10,以十为底:1*10^(-1);以二为底:0.00011001100...,形式上是一个无限循环小数!
然而计算机对浮点数的默认截止精度是17位,原本精确的十进制数将被保存为估计的二进制数,当显示给人看时,就被转化成估计的十进制数了。

值得注意的是,python在把数字显示给人看的时候,调用了repr(),这个函数的作用是把数字转化为string的形式,当然这个时候计算机已经对浮点数做了近似处理(你可以暂时理解成四舍五入)。

在更早的python版本中,你输入x=0.1,会返回x=1.00000000000000001,道理是一样的,而现在的版本会直接得到0.1,应该是python对显示做了优化处理。

以上如果你理解了,就知道1.2*3=3.5999999999999996的原因了

你可以参考麻省理工学院网易公开课视频---计算机科学及编程导论,这个在第5集讲到!
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答