js中小数运算出现的精度问题
原因
JS中数字类型只有number类型,相当于其他语言类型中的double(双精度浮点型),不区分浮点型和整数型
在计算机中存储方式: 使用64位二进制数表示
64位 = 1位符号位 + 11位指数位 + 52位小数位
浮点数运算精度丢失原因是:浮点数转化成二进制过程中会出现丢失
解决方案
1.原生类方法
1. 将小数华为整数进行运算
思路:将小数化为字符串,判断小数部分,运算两边同时乘10的最大小数位次幂,结果再缩小。
2. 限制精度
思路: Number.toFixed()
指定精确到小数点后几位
2.第三方封装类库
1. math
// 统一配置
math.config({
number:'BigNumber',
precision:20
});
// 转换数字类型
var temp = math.bignumber(a) * math.bignumber(b)
// 提取数字类型, 要不然是一个math对象,而不是一个数值
var result = math.number(temp);