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

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

发布了6 篇原创文章 · 获赞 21 · 访问量 3243

猜你喜欢

转载自blog.csdn.net/m0_37685031/article/details/105457777