为什么0.1+0.2≠0.3
计算机存储机制
计算机是通过二进制来存储数据的,而JavaScript是根据IEEE754标准中的双精度(64位)来存储数据的。也就是由64位0和1组成需要存储的数字。而这个64位0和1又分为三个部分,符号位(1)、指数位(11)、尾数(52)
1、 符号位:确定正、负。
2、 尾数的位数:确定精度。
3、指数的位数:确定所能表示的数的范围。
例子
说明
上图指数为1023为指数偏移值,双精度为1023,单精度为127
当有限遇到无限
从上述部分可以知道计算机在存储数字时会转化为二进制,而0.1转化为2进制是多少呢
从上图可知0.1转化为2进制会是一个循环数。但是尾数只有52位,当计算机遇到这种情况就会四舍五入。从而造成计算偏差。
解决
因为误差范围比较小,可以使用toFixed,指定到保留小数位