js精度计算问题,结合decimaljs的解决方法

在我们日常开发中,经常遇到两个数的加减乘除,通常正常的加减一般没有问题,但是遇到小数点,此时就很令人头痛了,例如

0.1+0.2 === 0.3 ???? 打开控制台一看晕了
0.1+0.2 = 0.30000000000000004

为了解决这种问题,网上有很多的办法,下面讲一下我在财务系统中结合decimaljs(decimal库github地址)的处理计算精度的经验。直接实现了加减乘除一个工具类

/**
 * 
 * 下面方法中的参数全为数值型, 没有做严格控制, 需要使用者自己转换。
 */
import {Decimal} from 'decimal.js';
let _seed = null;
class modelUtils {
    // 自动Id
    static uid () {
        _seed = _seed || (new Date()).valueOf();
        _seed++;
        return _seed;
    }
    /*
    * 功能:加
    * 参数:a,b
    */
    static add (a, b) {
        if (!a && !b) return 0;
        let addAmount = new Decimal(a || 0).add(b || 0).toNumber();
        return addAmount;
    }
    /*
    * 功能:减
    * 参数:a,b,
    */
    static sub (a, b) {
        if (!a && !b) return 0;
        let subAmount = new Decimal(a || 0).sub(b || 0).toNumber();
        return subAmount;
    }
    /*
    * 功能:乘
    * 参数:a;因数
    */
    static mul (a, factor) {
        if (!a || (!factor && typeof factor !== 'number')) return null;
        let mulAmount = new Decimal(a || 0).mul(factor || 0).toNumber();
        return mulAmount;
    }
    /*
    * 功能:除
    * 参数:a除数;b被除数
    */
    static div (a, b) {
        if (!b) return null;
        let divRate = new Decimal(a || 0).div(b).toNumber();
        return divRate;
    }
}
export default modelUtils;

调用

import modelUtils form './modelUtils';
modelUtils.add(0.1, 0.2)  // 0.3

如有错误请在下方评论,及时指出

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值