问题: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 操作可查看