JS乘法问题

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
}

欢迎大家留言评论哦

猜你喜欢

转载自blog.csdn.net/yldd_ldd/article/details/113776739