JS 小数运算出现误差的两种解决办法

本文介绍了解决 JS 中小数运算出现误差的两种解决办法

问题

在 JS 的小数运算中可能会出现一些问题,比如说下面两种情况:

  • 0.1 + 0.2 加法出现精度偏差问题
  • 0.14 * 100 乘法出现精度偏差问题

解决方案

下面简单介绍了两种常用的解决方案:

限制精确位数

可以限制保留几位小数的方式来避免误差:

// 保留两位小数
const num = (0.1 + 0.2).toFixed(2);

先将小数转化为整数,运算之后再重新转化为小数

限制保留小数位数的方式不一定适用于所有场景,有些时候我们必须要根据不同的小数位数来进行计算。那么我们就可以使用下面这种方式。

定义一个方法,用来对小数进行加法运算

/**
    * 用来进行小数相加的工具方法
    * @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;
}

使用上面的方法进行小数相加

const num = addNum(0.1 + 0.2);

总结

  • 第一种方法简单,方便,易于操作;

  • 第二种方法基本可以使用所有小数相加的场景。(如果是其他的运算,修改运算符号,也可以正常使用)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章