JavaScript数值高精度计算

在使用加减乘除对两个数值运算过程中,会出现精度缺失,小数位出现99999…等情况,接下来是解决方法。

1.计算代码

 export function actionOperationResult(val1, symbol, val2) {
  const len1 = val1.toString().length - val1.toString().indexOf(".") - 1;
  const len2 = val2.toString().length - val2.toString().indexOf(".") - 1;
  const p = Math.max(len1, len2);
  // 避免最终求出结果的长度大于最大长度的时候导致精度丢失 开启下面
  // p += p - Math.min(len1, len2); 
  const num = Math.pow(10, p);
  switch (symbol) {
    case "+":
      return (parseFloat((val1 * num).toFixed(2)) + parseFloat((val2 * num).toFixed(2))) / num;
    case "-":
      return (parseFloat((val1 * num).toFixed(2)) - parseFloat((val2 * num).toFixed(2))) / num;
    case "*":
      return (parseFloat((val1 * num).toFixed(2)) * parseFloat((val2 * num).toFixed(2))) / (num * num);
    default:
      break;
  }
}

2.调用代码

let quantity = 0,ton = 0
this.checkedData.forEach(v => {
	quantity = Number(quantity) + Number(v.quantity)
	ton = this.$toolFun.actionOperationResult(ton,'+',v.ton)
})
this.checkQuantity = quantity
this.checkTon = ton

3.公共方法全局注册

import * as toolFun from '@/libs/tools.js'; // 引入工具类
Vue.prototype.$toolFun = toolFun
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值