vue中高精度小数问题(加减乘除方法封装)处理

很多项目都会涉及到计算,比如对账、财务等,对数据的计算要求比较高,先简单看个例子:

  • 两 个 小 数 相 加 \color{#ed1941}{两个小数相加}
    在这里插入图片描述

    正常来说不应该是0.3吗?为什么会有这么多位数?

  • 两 数 相 减 \color{#ed1941}{两数相减}
    在这里插入图片描述

    不应该是0.2吗?

从以上例子来看计算的结果并不是很准确,所以可以用bigNumber来解决以上问题。

bigNumber

BigNumber.js是一个用于精度计算的js库。

API

地址:https://mikemcl.github.io/bignumber.js/

安装
npm install bignumber.js --S
使用
  • 引入

    import { BigNumber } from 'bignumber.js';
    
  • 例子

    • 加 \color{#009ad6}{加}

      add(a, b) {
        a = BigNumber(a);
        b = BigNumber(b);
        return a.plus(b).toNumber();   //结果需要用toNumber转为普通数字
      }
      //调用
      add(0.1,0.2)    //0.3
      

      在这里插入图片描述

    • 减 \color{#009ad6}{减}

      minus(a, b) {
        a = BigNumber(a);
        b = BigNumber(b);
        return a.minus(b).toNumber();
      },
      
      minus(0.3,0.1);     //0.2
      
    • 乘 \color{#009ad6}{乘}

      mutiply(a, b) {
        a = BigNumber(a);
        b = BigNumber(b);
        return a.multipliedBy(b).toNumber();
      }
      
      mutiply(3,0.6);   //1.8
      

      在这里插入图片描述

    • 除 \color{#009ad6}{除}

      devide(a, b) {
        a = BigNumber(a);
        b = BigNumber(b);
        return a.dividedBy(b).toNumber();
      }
      devide(355,113)  //  3.1415929203539825
      
    • 多 个 数 求 和 \color{#145b7d}{多个数求和}

      multiAdd(...params) {
        let data = BigNumber(0);
        for (let index = 0; index < params.length; index++) {
          const element = BigNumber(params[index]);
          data = data.plus(element);
        }
        return data.toNumber();
      }
      
      multiAdd(1,2,3,4,5);   //15
      
  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue,可以使用第三方库Decimal.js来解决小数的四则运算导致精度丢失的问题。Decimal.js是一个用于高精度数值计算的JavaScript库。 首先,需要在Vue项目通过npm安装Decimal.js库。可以使用以下命令进行安装: ``` npm install decimal.js --save ``` 安装完成后,在需要使用的组件引入Decimal.js库: ``` import Decimal from 'decimal.js'; ``` 然后,就可以使用Decimal.js提供的方法进行小数的四则运算了。 下面是一个示例代码,演示如何使用Decimal.js进行加减乘除运算并避免精度丢失的问题: ```vue <template> <div> <p>加法运算结果:{{ addResult }}</p> <p>减法运算结果:{{ subResult }}</p> <p>乘法运算结果:{{ mulResult }}</p> <p>除法运算结果:{{ divResult }}</p> </div> </template> <script> import Decimal from 'decimal.js'; export default { data() { return { addResult: 0, subResult: 0, mulResult: 0, divResult: 0, }; }, mounted() { // 加法运算 this.addResult = new Decimal(0.1).plus(0.2).toNumber(); // 减法运算 this.subResult = new Decimal(0.3).minus(0.1).toNumber(); // 乘法运算 this.mulResult = new Decimal(0.1).times(0.2).toNumber(); // 除法运算 this.divResult = new Decimal(0.3).dividedBy(0.1).toNumber(); }, }; </script> ``` 在上述示例代码,首先通过`import`语句引入了Decimal.js库。然后,通过`new Decimal()`创建Decimal对象,并使用Decimal对象的方法进行加减乘除运算。最后,使用`toNumber()`方法将结果转换为普通的JavaScript数字类型,并将结果渲染到模板。 通过使用Decimal.js库,可以避免小数四则运算导致的精度丢失问题,保证计算结果的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值