JS乘法问题
在javaScript中,乘法问题是很常见的一类问题,特别是当设计到小数的乘法时,其得出的结果会让不少人感到疑惑,例如1500 * 1.36,如果直接相乘的话,得出的结果为2040,然而,在javascript中,直接相乘得出的结果为2040.0000000000002,因为这个涉及到小数乘法的精确率问题,那么我们该如何解决呢?
这里,我给出的方法是:先取出所有的小数其小数点后的长度k,m,然后对应乘以10的k次方,10的m次方,取到该小数对应倍数后的整数,然后相乘后,得出的结果再除以10的(k+m)次方.
举个例子:
1500 * 1.36, 这里我们先将1.36取到小数点后的长度,为2,然后将1.36 * 10^2 = 136,然后将1500 * 136 获得的结果再除以100,就可以精确的得到2040这个结果,因为整数相乘不会存在浮点数运算产生的误差
举个例子:
求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题。
js代码如下:
function multiply(a, b) {
console.log(a*b);
// 先转换为字符串
var s1 = a.toString()
var s2 = b.toString()
var m1 = 0
var m2 = 0
try {
// 字符串拆分,获取小数点右边的长度
m1 += s1.split('.')[1].length
} catch (error) {
}
try {
m2 += s2.split('.')[1].length
} catch (error) {
}
// 转为整数
var t1 = Number(s1) * Math.pow(10, m1)
var t2 = Number(s2) * Math.pow(10, m2)
// 再转为小数
var result = t1 * t2 / Math.pow(10, m1 + m2)
return result
}
欢迎大家留言评论哦