美文网首页
JS:想做购物车?先学好加、减、乘、除的计算!

JS:想做购物车?先学好加、减、乘、除的计算!

作者: 以气御码 | 来源:发表于2020-07-02 10:04 被阅读0次

    我的代码有多短,本文章就有多短!(ㅍ_ㅍ)

    ※ 思路分析

    对于整数的运算,不会出错;而带了小数点的运算,直接计算容易出错。推荐的做法是,带了小数点的计算,都要经过处理。
    因此,对于带小数的加、减、乘、除运算,先变为整数的运算,再将得到的结果变回去(由中间值处理),得到最终的结果。

    一、加法运算

    1. 先看直接计算:
    console.log(0.1 + 0.2);
    // 打印结果 0.30000000000000004
    
    2. 代码实现
    function calcPlus(num1, num2) {
      let l1, l2, m;
      try {
        l1 = num1.toString().split(".")[1].length;
      } catch(e) {
        l1 = 0;
      }
      try {
        l2 = num2.toString().split(".")[1].length;
      } catch(e) {
        l2 = 0;
      }
      m = Math.pow(10, Math.max(l1, l2));
      return (num1 * m + num2 * m) / m;
    }
    
    console.log(0.1 + 0.2, calcPlus(0.1, 0.2));
    // 输出: 0.30000000000000004 0.3
    

    代码解析:
    m:得到小数点的位数的最大值,并10的次方得到中间值;
    m=10,因此计算式为:(0.1 * 10 + 0.2 * 10) / 10 = (1 + 2) / 10 = 3 / 10 = 0.3

    二、减法运算

    1. 先看直接计算:
    console.log(1.0 - 0.9);
    // 输出: 0.09999999999999998
    
    2. 代码实现
    function calcSubtract(num1, num2) {
      let l1, l2, m;
      try {
        l1 = num1.toString().split(".")[1].length;
      } catch(e) {
        l1 = 0;
      }
      try {
        l2 = num2.toString().split(".")[1].length;
      } catch(e) {
        l2 = 0;
      }
      m = Math.pow(10, Math.max(l1, l2));
      return (num1 * m - num2 * m) / m;
    }
     
    console.log(1.0 - 0.9, calcSubtract(1.0, 0.9));
    // 输出: 0.09999999999999998 0.1
    

    代码解析:
    m:得到小数点的位数的最大值,并10的次方得到中间值;
    m==10,因此计算式为:(1.0 * 10 - 0.9 * 10) / 10 = (10 - 9) / 10 = 1 / 10 = 0.1

    三、乘法运算

    1. 先看直接计算:
    console.log(19.9 * 100);
    // 输出:1989.999999999999
    
    2. 代码实现
    function calcMultiply(num1, num2) {
      let m = 0;
      try {
        m += num1.toString().split(".")[1].length;
      } catch(e) {}
      try {
        m += num2.toString().split(".")[1].length;
      } catch(e) {}
      return (Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", ""))) / Math.pow(10, m);
    }
     
    console.log(19.9 * 100, calcMultiply(19.9, 100));
    // 输出:1989.9999999999998 1990
    

    代码解析:
    m:得到小数点的最大的位数;
    因此计算式为:(199 * 100) / = 19900 / 10 = 1990

    四、除法运算

    1. 先看直接计算:
    console.log(6.6 / 0.2);
    // 输出:32.99999999999999
    
    2. 代码实现
    function calcDivide(num1, num2) {
      let l1 = 0, l2 = 0, n1, n2;
      try {
        l1 = num1.toString().split(".")[1].length;
      } catch(e) {}
      try {
        l2 = num2.toString().split(".")[1].length;
      } catch(e) {}
      n1 = Number(num1.toString().replace(".", ""));
      n2 = Number(num2.toString().replace(".", ""));
      return (n1 / n2) * Math.pow(10, l2 - l1);
    }
     
    console.log(6.6 / 0.2, calcDivide(6.6, 0.2));
    // 输出:32.99999999999999 33
    

    代码解析:
    n1,n2:去除小数点,即变为整数
    l2-l1:位数差,即中间值
    因此计算式为:(66 / 2) * = 33 * 1 = 33

    下载附件(CSDN)

    相关文章

      网友评论

          本文标题:JS:想做购物车?先学好加、减、乘、除的计算!

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