收藏
回答

想问一下js大神,如何计算商品价格,能尽可能保证计算结果的准确性,商家能尽可能多赚少亏?

因为小程序商品的单价都是几角几分的,例如¥0.15,¥0.2,¥0.26,¥0.13之类的,

并且每一个订单基本都是十几个到 二十几个商品,每个商品的数量都是十几个到二十几个,

例如:商品A¥0.15 ×15个,商品B¥0.2 ×20个,商品C¥0.25×18个,商品D¥0.13×17个等,


因为 JS数字精度不严谨,会出现丢失精度的情况,

想问一下有经验的前端朋友,在这种情况下,

如何计算商品价格,能尽可能保证计算结果的准确性,商家能尽可能多赚少亏?

最好是能贴个demo 🤣。。。。。。

最后一次编辑于  2020-07-11
回答关注问题邀请回答
收藏

5 个回答

  • Mr.Chen
    Mr.Chen
    2020-07-11
      //解决加减乘除的精度问题
    //加法计算 调用:Add(arg1,arg2)
      Add: function (arg1, arg2) {
        let r1, r2, m;
        try {
          r1 = arg1.toString().split(".")[1].length
        } catch (e) {
          r1 = 0
        }
        try {
          r2 = arg2.toString().split(".")[1].length
        } catch (e) {
          r2 = 0
        }
        m = Math.pow(10, Math.max(r1, r2))
        return ((arg1 * m + arg2 * m) / m)
      },
    
      //减法计算 调用:Subtr(arg1,arg2)
      Subtr: function (arg1, arg2) {
        let r1, r2, m, n;
        try {
          r1 = arg1.toString().split(".")[1].length
        } catch (e) {
          r1 = 0
        }
        try {
          r2 = arg2.toString().split(".")[1].length
        } catch (e) {
          r2 = 0
        }
        m = Math.pow(10, Math.max(r1, r2));
        n = (r1 >= r2) ? r1 : r2;
        return ((arg1 * m - arg2 * m) / m)
      },
    
      //乘法函数 调用:Mul(arg1,arg2)
      Mul: function (arg1, arg2) {
        let m = 0,
          s1 = arg1.toString(),
          s2 = arg2.toString();
        try {
          m += s1.split(".")[1].length
        } catch (e) { }
        try {
          m += s2.split(".")[1].length
        } catch (e) { }
        return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
      },
    
      //除法运算 调用:Div(arg1,arg2)
      Div: function (arg1, arg2) { 
        let t1 = 0,
          t2 = 0,
          r1, r2;
        try {
          t1 = arg1.toString().split('.')[1].length;
        } catch (e) { }
        try {
          t2 = arg2.toString().split('.')[1].length;
        } catch (e) { }
        r1 = Number(arg1.toString().replace('.', ''));
        r2 = Number(arg2.toString().replace('.', ''));
        return (r1 / r2) * Math.pow(10, t2 - t1);
      }
    
    
    2020-07-11
    有用 1
    回复 1
    • 宣华 
      宣华 
      2020-07-12
      谢谢,我研究研究
      2020-07-12
      回复
  • 李岩
    李岩
    2020-07-11

    多简单的问题,把商品单价的单位 改成 分。

    这样就不会有小数,整数计算就没问题了,微信支付就是这样设计的 避免了很多问题

    2020-07-11
    有用 1
    回复 1
    • 宣华 
      宣华 
      2020-07-12
      谢谢
      2020-07-12
      回复
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2020-07-11

    以整数形式计算,在除以100等等

    如¥0.15  => 15

    ¥0.15 * 10  => 15 * 10 = 150 => 150 / 100 = 1.5

    若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人

    2020-07-11
    有用
    回复 1
    • 宣华 
      宣华 
      2020-07-12
      谢谢
      2020-07-12
      回复
  • VBit
    VBit
    2020-07-11

    把价格转成整数计算完在转回去

    2020-07-11
    有用
    回复 1
    • 宣华 
      宣华 
      2020-07-12
      谢谢
      2020-07-12
      回复
  • 🔜དུང་ཟླ💕🌿💋
    🔜དུང་ཟླ💕🌿💋
    发表于移动端
    2020-07-11
    yyy
    2020-07-11
    有用
    回复
登录 后发表内容
问题标签