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只有整型,而过高精度的小数也无法正确保留其数值,所以如果位数实在太高的话那就没办法了(交给后端吧!)

浙公网安备 33010602011771号