JS数字精度丢失问题
约 166 字
JS数字精度丢失问题
JS中的数字是以科学计数法的形式存储64位双精度浮点数编码。
其中第1位为符号位,0表示正数,1表示负数;中间11位为指数位;最后52位为尾数位,会舍0进1。
在计算时会将十进制数转换成二进制,计算完成后再转换成十进制数,并且由于小数位数无限但二进制位数有限,因此引起计算误差,造成数字精度丢失。
解决方法是将小数转换成整数在计算,或是使用第三方库Math.js或BigDecimal.js。
JS中的数字是以科学计数法的形式存储64位双精度浮点数编码。
其中第1位为符号位,0表示正数,1表示负数;中间11位为指数位;最后52位为尾数位,会舍0进1。
在计算时会将十进制数转换成二进制,计算完成后再转换成十进制数,并且由于小数位数无限但二进制位数有限,因此引起计算误差,造成数字精度丢失。
解决方法是将小数转换成整数在计算,或是使用第三方库Math.js或BigDecimal.js。