一、JS内部的计算是以二进制形式进行的
js里整数和小数转为二进制形式的方法是不一样的:
二、Number类型使用IEEE754标准64位存储
双精度浮点数(double类型)为每个数分配64位空间,并以科学计数法的方式存储:
那么对于0.1的二进制形式:
0.1的小数位是无穷的,只能截取52位,且53位为1,需要往前进一位,所以发生了第一次精度丢失。
同理可得,0.2的保存形式为:
三、IEEE754标准64位数值相加
0.1的二进制与0.2的二进制相加结果为:
有53位且为1,需要截取一位并进位,发生了第二次精度丢失,
这个二进制值转为十进制就是0.30000000000000004