小程序
小游戏
企业微信
微信支付
扫描小程序码分享
因为小程序商品的单价都是几角几分的,例如¥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 🤣。。。。。。
5 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
//解决加减乘除的精度问题 //加法计算 调用: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); }
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
多简单的问题,把商品单价的单位 改成 分。
这样就不会有小数,整数计算就没问题了,微信支付就是这样设计的 避免了很多问题
以整数形式计算,在除以100等等
如¥0.15 => 15
¥0.15 * 10 => 15 * 10 = 150 => 150 / 100 = 1.5
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人
把价格转成整数计算完在转回去
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
//解决加减乘除的精度问题 //加法计算 调用: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); }
多简单的问题,把商品单价的单位 改成 分。
这样就不会有小数,整数计算就没问题了,微信支付就是这样设计的 避免了很多问题
以整数形式计算,在除以100等等
如¥0.15 => 15
¥0.15 * 10 => 15 * 10 = 150 => 150 / 100 = 1.5
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人
把价格转成整数计算完在转回去