JS精度计算的几种解决方法,1、转换成整数计算后再转换成小数,2、toFixed,3、math.js,4、bignumber.js,5、big.js

提示:学习express,搭建管理系统


前言

原始计算

 let aNum = 6.6 + 0.3;
 let bNum = 6.6 - 0.2;
 let cNum = 6.6 * 0.3;
 let dNum = 6.6 / 0.2;
 console.log(aNum,bNum,cNum,dNum,'normal');

一、转换成整数计算后再转换成小数

//乘以小数点后保留的位数的倍数
let multipleNum = 100;
 aNum = (Math.round(6.6*multipleNum + 0.3*multipleNum))/multipleNum;
 bNum = (Math.round(6.6*multipleNum - 0.2*multipleNum))/multipleNum;
 cNum = (Math.round(6.6 * 0.3 * multipleNum))/multipleNum;
 dNum = (Math.round((6.6 / 0.2) * multipleNum))/multipleNum;
 console.log(aNum,bNum,cNum,dNum,'multipleNum');

在这里插入图片描述

二、toFixed

Number.toFixed会返回String类型

//toFixed四舍五入保留几位小数  并且把number类型转成string类型
aNum = parseFloat((6.6+0.3).toFixed(2));
bNum = parseFloat((6.6-0.2).toFixed(2));
cNum = parseFloat((6.6*0.3).toFixed(2));
dNum = parseFloat((6.6/0.2).toFixed(2));
console.log(aNum,bNum,cNum,dNum,'toFixed');

在这里插入图片描述

三、math.js

npm install mathjs --save-dev
aNum =  math.add(math.bignumber(6.6), math.bignumber(0.3));
bNum =  math.subtract (math.bignumber(6.6), math.bignumber(0.2));
cNum =  math.multiply(math.bignumber(6.6), math.bignumber(0.3));
dNum =  math.divide(math.bignumber(6.6), math.bignumber(0.2));
console.log(aNum.toNumber(),bNum.toNumber(),cNum.toNumber(),dNum.toNumber(),'math bignumber toNumber');console.log(parseFloat(aNum.toString()),parseFloat(bNum.toString()),parseFloat(cNum.toString()),parseFloat(dNum.toString()),'math bignumber toString');console.log(parseFloat(math.format(aNum)),parseFloat(math.format(bNum)),parseFloat(math.format(cNum)),parseFloat(math.format(dNum)),'math bignumber format');

在这里插入图片描述

git地址
math.js官网
在这里插入图片描述

四、bignumber.js

npm install bignumber.js --save-dev
let num = new BigNumber(6.6);
aNum = num.plus(0.3);
bNum = num.minus(0.2);
cNum = num.multipliedBy(0.3);
dNum = num.dividedBy(0.2);
console.log(aNum.toNumber(),bNum.toNumber(),cNum.toNumber(),dNum.toNumber(),'bignumber.js toNumber');console.log(parseFloat(aNum.toString()),parseFloat(bNum.toString()),parseFloat(cNum.toString()),parseFloat(dNum.toString()),'bignumber.js toString');console.log(parseFloat(aNum.toFormat()),parseFloat(bNum.toFormat()),parseFloat(cNum.toFormat()),parseFloat(dNum.toFormat()),'bignumber.js toFormat');

在这里插入图片描述
git地址
在这里插入图片描述

五、big.js

npm install big.js --save-dev
let num0 = new Big(6.6);
aNum = num0.add(0.3);
bNum = num0.minus(0.2);
cNum = num0.times(0.3);
dNum = num0.div(0.2);
console.log(aNum.toNumber(),bNum.toNumber(),cNum.toNumber(),dNum.toNumber(),'big.js toNumber');console.log(parseFloat(aNum.toString()),parseFloat(bNum.toString()),parseFloat(cNum.toString()),parseFloat(dNum.toString()),'big.js toString');

在这里插入图片描述
git地址
在这里插入图片描述

总结

踩坑路漫漫长@~@

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值