本文介绍了解决 JS
中小数运算出现误差的两种解决办法
问题
在 JS 的小数运算中可能会出现一些问题,比如说下面两种情况:
0.1 + 0.2
加法出现精度偏差问题0.14 * 100
乘法出现精度偏差问题
解决方案
下面简单介绍了两种常用的解决方案:
限制精确位数
可以限制保留几位小数的方式来避免误差:
1 | // 保留两位小数 |
先将小数转化为整数,运算之后再重新转化为小数
限制保留小数位数的方式不一定适用于所有场景,有些时候我们必须要根据不同的小数位数来进行计算。那么我们就可以使用下面这种方式。
定义一个方法,用来对小数进行加法运算1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22/**
* 用来进行小数相加的工具方法
* @param {*} num1
* @param {*} num2
*/
addNum (num1, num2) {
let sq1, sq2, multiple;
try {
sq1 = num1.toString().split(".")[1].length;
}
catch (e) {
sq1 = 0;
}
try {
sq2 = num2.toString().split(".")[1].length;
}
catch (e) {
sq2 = 0;
}
multiple = Math.pow(10, Math.max(sq1, sq2) + 1);
return (num1 * multiple + num2 * multiple) / multiple;
}
使用上面的方法进行小数相加1
const num = addNum(0.1 + 0.2);
总结
第一种方法简单,方便,易于操作;
第二种方法基本可以使用所有小数相加的场景。(如果是其他的运算,修改运算符号,也可以正常使用)