概念及问题
- js中处理浮点数运算时会出现精度丢失。
- js中整数和浮点数都属于Number数据类型,所有的数字都是以64位浮点数形式存储,整数也是如此。所以打印x.00这样的浮点数的结果为x而非x.00。
- 当浮点数进行数学运算(加减乘除)时,有时会出现问题,如下4张图:




问题分析
js中数值采用IEEE754 标准的64位双精度浮点数,对于64位的浮点数在内存中的表示,最高的1位是符号位,接着的11位是指数,剩下的52位为有效数字(52+11+1 = 64位):
- 第0位:符号位,s表示,0表示正数,1表示负数
- 1~11位:储存指数部分,e表示
- 12~63位:存储小数部