nodejs float计算丢失精度,保留几位小数

问题:0.1+0.2=0.30000000000000000003

解决方案

 计算精度问题

使用bignumber.js

const BigNumber = require('bignumber.js');
function add(a,b) {
    let ba = new BigNumber(a);
    let bb = new BigNumber(b);
    let re = ba.plus(bb);
    return re.toString();
}

保留几位小数

number中有个toFixed(n); 会四舍五入

如果不要四舍五入,只能借鉴其他方法, 

有看到一个先乘以1*10n,然后再除于1*10n; 例Number.parseFloat((Number.parseInt(num * 1000000) / 1000000).toFixed(6));这个会有个问题,数字太大,parseFloat时,小数直接给丢了...    

另外一个是通过字符串截取小数,只保留几位小数;(未测试)

此处解决方案,还是使用bignumber.js

function floatToFixed6(num){
    return new BigNumber(num).toFormat(6,BigNumber.ROUND_DOWN); 
}

上面可以直接取6位。 出现个问题是,数字大每3位会加个逗号。

解决方法:

const BigNumberFmt = {
    decimalSeparator: '.',
    groupSeparator: '',
    groupSize: 0,
};

function floatToFixed6(num){
    return new BigNumber(num).toFormat(6,BigNumber.ROUND_DOWN,BigNumberFmt);
}

更多的bignumber.js 操作可查看

bignumber.js使用记录  

猜你喜欢

转载自blog.csdn.net/zgf1991/article/details/99569950