前端计算精度丢失问题

文章讲述了在Vue项目中处理精度丢失问题的方法,通过引入bignumber.js库进行大数运算,并针对toFixed方法进行了自定义扩展,提供高精度的加减乘除和toFixed重写,确保数值计算的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 精度丢失异常数据汇总
10.3950 * 3935.00 = 期望40904.33, 异常结果40904.32
7.3950 * 3835.00 = 期望28359.83, 异常结果28359.82
11.777 * 4215 = 期望49640.06, 异常结果49640.05
12.445 * 4005 = 期望49842.23,异常结果49842.22
3721*17.0480 = 期望63435.61,异常结果63435.60
3621*5.0060 = 期望18126.73,异常结果18126.72

vue项目中直接装插件

npm install bignumber.js
import {
    BigNumber } from 'bignumber.js';
// +
export function add(a, b) {
   
  a = BigNumber(a);
  b = BigNumber(b);
  return a.plus(b).toNumber();   //结果需要用toNumber转为普通数字
}
// -
export function minus(a, b) {
   
  a = BigNumber(a);
  b = BigNumber(b);
  return a.minus(b).toNumber();
}
// *
export function mut(a, b) {
   
  a = BigNumber(a);
  b = BigNumber(b);
  return a.multipliedBy(b).toNumber();
}
// /
export function dev(a, b) {
   
  a = BigNumber(a);
  b = BigNumber(b);
  return a.dividedBy(b).toNumber();
}

界面中使用:

import {
   
	add,
	minus,
	mut,
	dev
} from '@/utils/common.js' //公共方法

row.amountStr = (this.mut(Number(row.salePriceStr), Number(row.weightStr))).toFixed(2)

toFixed也有精度丢失问题,直接main.js中改写toFixed方法

Number.prototype.toFixed = function(d) {
   
  var s = this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值