首页 > 试题广场 >

乘法

[编程题]乘法
  • 热度指数:45578 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题
示例1

输入

3, 0.0001

输出

0.0003
function multiply (a, b) {
    let sa = a.toString();
    let sb = b.toString();
    let ia = sa.lastIndexOf('.') != -1 ? sa.length - 1 - sa.lastIndexOf('.') : 0;
    let ib = sb.lastIndexOf('.') != -1 ? sb.length - 1 - sb.lastIndexOf('.') : 0;
    let max = Math.max(ia, ib);
    return (a * b).toFixed(max);
}

发表于 2024-03-25 00:24:27 回复(0)
// 编译不通过
function multiply(a, b) {
      let i = (a + '').split('.')
    let i1 = (b + '').split('.')
    let len = i.length > i1.length ? i : i1
    let r = i.length < i1.length ? i : i1
    if (len.length === 1) return a * b
    let len2 = len[1].length + 1
    let l = len[1]
    return '0.'.padEnd(len2, 0) + (r * l)
}
发表于 2023-11-22 19:52:10 回复(0)
function multiply(a, b) {
    let aIndex = a.toString().replace(".", "").length - 1;
    let bIndex = b.toString().replace(".", "").length - 1;
    let aData = a * Math.pow(10, aIndex);
    let bData = b * Math.pow(10, bIndex);
    let divide = Math.pow(10, aIndex + bIndex);

    return (aData * bData) / divide;
}
发表于 2023-09-14 14:19:04 回复(0)
function multiply(a = 0, b = 0) {
  const decimal1 = `${a}`.split('.')[1]
  const decimal2 = `${b}`.split('.')[1]
  const len1 = decimal1 ? decimal1.length : 0
  const len2 = decimal2 ? decimal2.length : 0
  const len = len1 + len2;
  return parseInt(a * Math.pow(10, len1)) * parseInt(b * Math.pow(10, len2)) / Math.pow(10, len)
}
发表于 2023-06-29 11:02:28 回复(0)
        function multiply(a, b) {
            a = a + ""
            b = b + ""
            let along = 0
            let blong = 0
            if (a.indexOf(".") !== -1) {
                //a是小数,按点分割
                let newa = a.split(".")
                along = newa[1].length
                console.log(along);
            }
            if (b.indexOf(".") !== -1) {
                //b是小数
                let newb = b.split(".")
                 blong = newb[1].length
                console.log(blong);
            }
            let sum
            sum = parseInt( (+a) * Math.pow(10, along))    *  parseInt(  (+b) * Math.pow(10, blong))
            sum = sum / (Math.pow(10, along) * Math.pow(10, blong))
            return sum
        }

发表于 2023-05-13 16:28:32 回复(0)
    function multiply(a, b) {
            if (Number.isInteger(a) && Number.isInteger(b)) {
                return a * b
            }
            if (!Number.isInteger(a) || !Number.isInteger(b)) {
                const args = [a, b];
                return args.reduce((sum, cur) => {
                    if (Number.isInteger(cur)) {
                        sum *= cur
                        return sum
                    } else {
                        const numArr = cur.toString().split('.');
                        const bArr = numArr[1].split('');
                        const bindex = bArr.findIndex((item) => item > 0);
                        const curNumber = +bArr.slice(bindex, bArr.length).join('').toString();
                        const tens = Math.pow(10, numArr[1].length)
                        cur = curNumber
                        sum *= cur
                        sum = sum / tens
                        return sum
                    }
                }, 1)
            }

            // 小数点
            function changeNumber(...args) {
                return args.reduce((sum, cur) => {
                    if (Number.isInteger(cur)) {
                        sum *= cur
                        return sum
                    } else {
                        const numArr = cur.toString().split('.');
                        const bArr = numArr[1].split('');
                        const bindex = bArr.findIndex((item) => item > 0);
                        const curNumber = +bArr.slice(bindex, bArr.length).join('').toString();
                        const tens = Math.pow(10, numArr[1].length)
                        cur = curNumber
                        sum *= cur
                        sum = sum / tens
                        return sum
                    }
                }, 1)

            }


        }
        

发表于 2023-05-09 22:46:23 回复(0)
这代码100%过,就是容易挨打
function multiply(a, b) {
let num=parseInt(a)*parseFloat(b)
if(parseFloat(b)>0.001){
   return  num.toFixed(1)
}else{
  return  num.toFixed(4)
}
}
发表于 2023-03-22 16:53:50 回复(0)
function multiply(a, b) {
    function numL(num){
        return num<1? num.toString().length-2 :num
    }
    return (a*Math.pow(10,numL(a))*b*Math.pow(10,numL(b)))/Math.pow(10,numL(a))/Math.pow(10,numL(b))
}

发表于 2022-12-01 11:09:45 回复(0)
简洁易懂,计算出哪个参数的小数点后位数更长
function multiply(a, b) {
            let aArr = (''+a).split(".")
            let bArr = (''+b).split(".")
            let num = aArr[1] > bArr[1] ? aArr[1].length : bArr[1].length
            return (a*b).toFixed(num)
}
发表于 2022-11-17 01:54:05 回复(0)
  function multiply(a, b) {
    let l = (''+b).split('.')[1];
    return (a*b).toFixed(l.length)
  }
发表于 2022-09-07 13:19:42 回复(0)
function multiply(a, b) {
    aL = a.toString().split('.').length>1? a.toString().split('.')[1].length : 0
    bL = b.toString().split('.').length>1? b.toString().split('.')[1].length : 0
    return (Math.pow(10,aL) * a)*(Math.pow(10,bL) * b) / Math.pow(10,aL + bL)
}
发表于 2022-08-18 18:10:53 回复(0)
弄了半天原来不支持es6的指数运算符**
发表于 2022-06-12 22:16:28 回复(0)
// 运算中 涉及小数, 就容易造成精度损失, 解决办法 可以是 转成整数运算。
function multiply(a, b) {
    aStr = a + '';
    bStr = b + '';
    aPoint = aStr.indexOf('.');
    bPoint = bStr.indexOf('.');

    if (aPoint === bPoint === -1) {
        return a * b
        // * a 为小数, b为整数
    } else if (aPoint !== -1 && bPoint === -1) {
            // 获取小数位数
            const len = aStr.length - (aPoint + 1);
            return (a * 10 ** len) * b / 10**len
            // * a 为整数, b为小数
        } else if (bPoint !== -1 && aPoint === -1) {
            const len = bStr.length - (bPoint + 1);
            return (b * 10 ** len) * a / 10**len
            // * 都是小数
        } else {
            const len = aStr.length - (aPoint + 1);
            const len2 = bStr.length - (bPoint + 1);
            return (a * 10 ** len) * (b * 10 ** len2) / 10**len / 10**len2
        }
    }
}
发表于 2022-06-09 16:23:05 回复(0)
function multiply(a, b) {
  return (a*10) *(b*10) /100;
}
题意是想避免JS双精度64bit浮点数运算遇到结果为0.30000000000000004的处理问题
发表于 2022-05-11 21:10:19 回复(1)
function multiply(a, b) {
    if(a * b < 0.01) {
        return (a * b).toFixed(4)
    } else {
        return (a * b).toFixed(1)
    }
}
仅仅能通过测试的摆烂写法
发表于 2022-05-08 14:51:43 回复(0)
function multiply(a, b) {
    let valueA = a.toString();
    let valueB = b.toString();
    let dotA = valueA.indexOf('.');
    let dotB = valueB.indexOf('.');
    let numA = valueA.length - dotA - 1;
    let numB = valueB.length - dotB - 1;
    let kk = numA > numB ? numA:numB;
    return (a*b).toFixed(kk);    
}
发表于 2022-03-20 21:41:02 回复(0)
function multiply(a, b) {
    var len = Math.max(String(a).indexOf('.') != -1 ? String(a).split('.')[1].length : 0, String(b).indexOf('.') != -1 ? String(b).split('.')[1].length : 0);
    return (a * b).toFixed(len);
}

发表于 2022-02-15 18:15:57 回复(0)
function multiply(a, b) {
var a1=a*10000;
    var b1=b*10000;
    var temp = a1*b1;
    var result = temp/100000000;
    return result
}
比较野蛮的方法 大家应该一看就懂
发表于 2022-01-27 15:08:31 回复(0)
function multiply(a, b) {
// 首先截取b的小数点后面的数字长度,截取自带转换为字符串
       let d = b.toString().split('.')[1]
      // 然后将两个值进行乘法计算
       let c = a * b
       // 返回计算之后的值,保留小数。传进来几位返回几位
       returnc.toFixed(d.length)
   }
发表于 2022-01-24 11:12:29 回复(0)
function multiply(a, b) {
  let newA = []
  let newB = []
  if('.'.indexOf(a)){
    al = a.toString().split('.')[1]
    if(al && al.length) {
      newA = al.length
    } else {
      newA = 0
    }
  }
  if('.'.indexOf(b)){
    bl = b.toString().split('.')[1]
    if(bl && bl.length) {
      newB = bl.length
    } else {
      newB = 0
    }
  }
  return (a * b).toFixed(newA + newB)
}
发表于 2022-01-17 18:52:49 回复(0)