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
}

欢迎大家留言评论哦

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值