JS中小数计算时获取正确结果

JS中,所有数字都以双精度64位浮点格式表示,因此部分小数进行计算时,会出现无法预测的长小数结果,导致无法得到想要的结果。

为了避免这种现象出现,可以使用个简单方法转换后再进行计算,即将数字放大为整数后计算再等比缩小

那关键就在于获取小数精度位,以下是方法代码:

function getPrecision(num) {
    let str = num.toString()
    return Math.pow(10, str.split('.')[1].length || 0)
}

先将数字转换为字符串,然后再转换为数组,因为有小数,所以数组第二项必定为小数部分;

然后获取这串“字符串”的长度,再应用Math.pow(x, y)函数(计算x的y次方)获取需要缩放的倍数,就可以了。

 

注意:若是一元运算,请对每一个参数调用并算出最大值,使用最大倍数进行计算;

若是小数部分精度过高,转换后的整数值过大,那么需要转换为BigInt类型,再数字末尾加上n或者使用BigInt构造即可。

 不过因为BigInt只有整型,而过高精度的小数也无法正确保留其数值,所以如果位数实在太高的话那就没办法了(交给后端吧!)

 

posted @ 2024-09-26 16:22  RicardoX3  阅读(73)  评论(0)    收藏  举报