js超大数运算加减乘除

建议用第三方库bignumber.js。解决精度丢失,解决超大数运算。安装【npm i bignumber.js】。
https://www.npmjs.com/package/bignumber.js
https://github.com/MikeMcl/bignumber.js

//注意:超大数运算的参数必须是字符串,非字符串的超大数精度已丢失(得出的结果也是错误的)。运算的参数如果是空字符串或null或undefined,否则计算出的结果是NaN。计算出来的结果值只能是字符串,才能保证超大数的精度不丢失。
import BigNumber from "bignumber.js";
window.BigNumber = BigNumber;//全局变量
//相加【+】
BigNumber('1111222233334444555566').plus('34').toString(10);//输出:1111222233334444555600
//相减【-】
(new BigNumber(0.3)).minus(0.1).toString(10);//输出:0.2(精度不丢失)

//相乘【*(×)】
var x = new BigNumber(0.9);
x.multipliedBy(9).toString(10);
//相除【/(÷)】
BigNumber(0.9).dividedBy(9).toString(10);//输出:0.1
BigNumber("99999999999999999999999999999999.99999999999999999999999999999999").dividedBy("333333333333333333").toString(10);//输出:300000000000000.0003

//保留N位小数
BigNumber("1").dividedBy("3").toFixed(2);//保留2位小数,输出:0.33
BigNumber("0.100000").toFixed(6);//保留2位小数,输出:0.100000 。要想去掉后面的0,可用【Number("0.100000")】【parseFloat("0.100000")】【"0.100000".replace(/\.?0+$/, "")】。注:字符串转数字可能出现精度丢失。

//去掉小数末尾的0
BigNumber("0.100000").toFixed();//输出:0.1
BigNumber("0.100000").toString(10);//输出:0.1

//进制转换
BigNumber("9999999999999999999999.9999999").toString();//输出:9.9999999999999999999999999999e+21
BigNumber("9999999999999999999999.9999999").toString(10);//十进制输出:9999999999999999999999.9999999
BigNumber("8").toString(2);//二进制输出:1000

//字符串转数字
BigNumber("9.9999999999999999").toNumber();//输出:10。注意:字符串转数字会出现精度丢失。Number()与parseFloat()转换也无法避免精度丢失。

//两个字符串或纯数字比较
BigNumber("2.1") >= BigNumber("1.03");//true
BigNumber("2.1") >= BigNumber(5);//false

补充:第三方库【decimal.js】与【number-precision】虽然解决精度丢失,但是没有解决超大数运算的问题。所以建议用【bignumber.js】进行运算。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容