BigNumber解决js基本运算精度问题

文章讲述了JavaScript中浮点数运算导致的精度丢失问题,以及如何通过引入第三方库bigNumber.js来封装并实现精确的四则运算,包括加、减、乘、除。在项目中,这些封装好的方法被挂载到Vue实例上,以便在代码中方便调用。
摘要由CSDN通过智能技术生成

BigNumber解决js基本运算精度问题

问题:今天在工作中发现了一个问题 0.07 * 100得到的不是7而是7.000000000000001,经过了解得知,浮点数在js中存储会转为双精度的二进制存储。比如0.1的二进制格式是:0.0001100011…。这是一个二进制无限循环小数,取前52位,所以一些小数存在计算机中天然就存在舍入误差。
解决方案:采用第三方库bigNumber.js来解决。

  • 下载
import BigNumber from 'bignumber.js'
  • 基于BigNumber在项目中封装基本的四则运算
// utils/math.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 subtract(a, b) {
  a = BigNumber(a)
  b = BigNumber(b)
  return a.minus(b).toNumber() // 结果需要用toNumber转为普通数字
}
// 乘
export function multiply(a, b) {
  a = BigNumber(a)
  b = BigNumber(b)
  return a.times(b).toNumber()
}
// 除
export function divide(a, b) {
  a = BigNumber(a)
  b = BigNumber(b)
  return a.idiv(b).toNumber()
}

  • 将封装好的方法在main.js中引入并且挂载到vue实例上
//main.js
// 导入加减乘除计算方法
import * as calc from './utils/math'
//挂载到实例上
// 挂载运算方法
Vue.prototype.$calc = calc

  • 项目中使用
this.$calc.add(0.1,0.2) // 0.3
  • BigNumber.js中还有许多实用的方法,有兴趣的可以去查阅了解
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值