在我们日常开发中,经常遇到两个数的加减乘除,通常正常的加减一般没有问题,但是遇到小数点,此时就很令人头痛了,例如
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
如有错误请在下方评论,及时指出