美文网首页
js解决浮点数相加出现超长小数的问题

js解决浮点数相加出现超长小数的问题

作者: 扶得一人醉如苏沐晨 | 来源:发表于2023-05-08 14:06 被阅读0次

    一、前端程序员送命题 0.1 + 0.2 = ?

    image.png

    二、为什么会出现如此无法理解的答案?

    我Google了一下,发现原来这是JavaScript浮点运算的一个bug。

    比如:7*0.8 JavaScript算出来就是:5.6000000000000005

    网上找到了一些解决办法,就是重新写了一些浮点运算的函数。
    Math.pow
    例如:Math.pow(4,3);返回4的三次方,
    用法:Math.pow(x,y)
    思路如下
    1、首先截取两个小数的小数位
    2、Math.max取二者之间的较大值作为平方数
    3、Math.pow求一个值为10的n次方(n就是两个数的小数位较大值)

    // 处理小数相加出现超长小数的问题
    export function addNum(num1, num2) {
      let sq1, sq2, m;
      try {
        sq1 = num1.toString().split(".")[1].length;
      } catch (e) {
        sq1 = 0;
      }
      try {
        sq2 = num2.toString().split(".")[1].length;
      } catch (e) {
        sq2 = 0;
      }
      m = Math.pow(10, Math.max(sq1, sq2));
      return (num1 * m + num2 * m) / m;
    }
    

    相关文章

      网友评论

          本文标题:js解决浮点数相加出现超长小数的问题

          本文链接:https://www.haomeiwen.com/subject/xvllsdtx.html