因为 JS 采用 IEEE 754 双精度版本(64位),并且只要采用 IEEE 754 的语言都有该问题(我知道的java也是这样)。我们都知道计算机是通过二进制来存储东西的,0.1和0.2在转换二进制后都是是无限循环的,这样其实没什么问题,但是 JS 采用的浮点数标准却会裁剪掉后面的数字,导致精度丢失 0.1+0.2=0.30000000000000004。
比如18466.67*100,按理说他等于1846667吧,可是他等于1846666.9999999998,效果如下
二、我们可以这样处理: parseFloat((0.1 + 0.2).toFixed(10))
parseFloat((18466.67*100).toFixed(0))



