求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题

这是牛客网的题目:

求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题
输入:3, 0.0001
输出:0.0003

function multiply(a, b) {
        // 先把a,b两个数字都变成字符串
       var stra = ""+a;
       var strb = b.toString();
       //获取小数位数
       // indexOf('.')==-1  就是说明这个字符串中没有点,也就是没有小数
       //stra.length -stra.indexOf('.')-1   的意思是用stra字符串的长度减去找到点的位置的索引再减去1(因为length会比index大1)就是小数点后面的长度
       var lena = (stra.indexOf('.')==-1)?0:(stra.length-stra.indexOf('.')-1);
       var lenb = (strb.indexOf('.')==-1)?0:(strb.length-strb.indexOf('.')-1);
       // 通过Math的max方法求这两个里面哪个的小数点后面的位数更长,因为根据示例,保留的是长度更长的那一个数字后面的位数
       var len = Math.max(lena,lenb);
       // 通过parseFloat将字符串转换为浮点型数字,再通过toFixed决定保留小数位的长度
       var result = parseFloat(a*b).toFixed(len);
       return result
       }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值