JavaScript的Number类型在我们平时写脚本的时候随处可见,但是因为前端对精度的要求不高,虽然不常见,但是有时也会碰到0.1+0.2!=0.3的情况,如果你不了解Number,可能就需要浪费很久事件去找bug。什么你没遇见过,不敢兴趣,了解下呗,防患于未然(虽然DUCK不必),面试会问到啊,看嘛,我讲快点(╥╯^╰╥)
Number类型
在js里,它是个双精度浮点数,用二进制来表示,就是个64位的数。其中呢,精度丢失就发生最后52位中。
在ES规范中规定e的范围在-1074 ~ 971
二进制的第一位有效数字必定是1,这个1不会被存储,可以节省一个存储位,因此尾数部分可以存储的范围是1 ~ 2(52+1)
要了解精度丢失问题?我们先了解下十进制转二进制
二进制与十进制的转换
二进制转十进制,就是一个个乘
二进制
101.1 101.1 101.1
十进制
1 × 2 2 + 0 × 2 1 + 1 × 2 0 + 1 × 2 − 1 = 5.5 1\times2^2 + 0\times2^1 + 1\times2^0 + 1\times2^-1 =5.5