首页 > 试题广场 >

乘法

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

输入

3, 0.0001

输出

0.0003
function multiply(a, b) {
    var len_a=(a+'').length;
    var len_b=(b+'').length;
    var max_len=len_a>len_b?len_a:len_b;
    var c=a*b+'';
    return c.substring(0,max_len);
}
计算出a,b的长度,然后取出较大的那个作为精度,计算相乘的结果转换为字符串再截取精度
发表于 2021-05-18 13:29:11 回复(0)
function multiply(a, b) {
     return parseFloat((a*b).toFixed(10))
}
js加减乘具有精度问题,Number是64位的,可以通过parseFloat(  .toFixed())来消除
发表于 2021-04-01 12:35:50 回复(0)
function multiply(a, b) {
    let _a=String(a),_b=String(b);
    let len=Math.max(_a.length-_a.indexOf('.')-1,_b.length-_b.indexOf('.')-1);
    return parseFloat(a*b).toFixed(len);
}
发表于 2021-01-19 13:23:51 回复(0)
function multiply(a, b) {
let aLen=(a.toString().split(".")[1]||"").length
let bLen=(b.toString().split(".")[1]||"").length
return (a*b).toFixed((aLen)+(bLen))
}

发表于 2020-09-10 23:42:02 回复(0)
function multiply(a, b) {
    return ((a*20000)*(b*20000))/(20000*20000);
}
发表于 2019-10-24 09:38:15 回复(0)
function multiply(a, b) {
    return a * b;
}

发表于 2019-08-22 10:47:22 回复(0)
//判断a和b是不是小数
//如果是小数,就转换成整数,倍数是a1 ,b1
//将a和b作乘法
//将结果除以相应的倍数
function multiply(a, b) {
  var a1 = 1, b1 = 1;
  if(a != parseInt(a, 10)){
    a1 = Math.pow(10, a.toString().length - 2);
    a = a * a1;
  }
  if(b != parseInt(b, 10)){
    b1 = Math.pow(10, b.toString().length - 2);
    b = b * b1;
  }
  return a*b/(a1*b1);
}


发表于 2019-05-31 11:20:14 回复(0)
function multiply(a, b) {
    return parseInt(a*b*10000)/10000;
}
调整数字就能改变精度,不过不能考虑四舍五入的情况了,可以多加一个精度然后判断一下
发表于 2019-03-10 18:54:30 回复(0)
function multiply(a, b) {
    return a.toPrecision(12) * b.toPrecision(12)
}
发表于 2019-02-24 20:39:01 回复(0)
先将number转为string,将两者进行精度比较:即小数点后位数长度 = 总长度 - 小数点前整数长度。
需要注意的是index从0开始。
function multiply(a, b) {
var str_a = a.toString();
var str_b = b.toString();
// *重要*: 取精度大的作为结果精度
var a_length = str_a.length - str_a.indexOf('.')-1;
var b_length = str_b.length - str_b.indexOf('.')-1;
var length = Math.max(a_length, b_length);
return parseFloat(str_a * str_b).toFixed(length);
}


发表于 2019-02-19 14:37:25 回复(0)

function multiply(a, b) {

    var astr = a.toString().split(".")[1];

    var bstr = b.toString().split(".")[1];

    if(astr){

        var la = astr.length;

    }else {

        var la = 0;

    }

    if(bstr){

        var lb = bstr.length;

    }else{

        var lb = 0

    }

    return a*b.toFixed(la+lb);

}

发表于 2017-08-21 14:59:38 回复(0)
function multiply(a, b) {
return a*b;
}
发表于 2017-03-27 17:13:11 回复(0)
function multiply(a, b) {
    var aStr = a + ''
    var bStr = b + ''
    //var pointLen = Math.max(aStr.length-aStr.indexOf('.')-1, bStr.length-bStr.indexOf('.')-1)
    var pointLen = aStr.length-aStr.indexOf('.')-1 + bStr.length-bStr.indexOf('.')-1
    return parseFloat((a*b).toFixed(pointLen))
}

发表于 2017-03-17 21:08:46 回复(0)
计算两小数的小数点位数,然后相加得到保留的小数点位数,用tofixed函数即可
function multiply(a, b) {
    var re = /\./;
    var aDec = a.toString().split('.')[1] || '';
    var bDec = b.toString().split('.')[1] || '';
    var fix = aDec.length  + bDec.length;
    return (a * b).toFixed(fix);
}
发表于 2017-03-16 21:10:49 回复(8)
function multiply(a, b) {
    var sa = a+"";
    var sb = b+"";
    return (a*Math.pow(10,sa.length))*(b*Math.pow(10,sb.length))/Math.pow(10,sa.length+sb.length);
}


这样会有问题吗
发表于 2016-11-11 16:19:18 回复(0)
function multiply(a, b) {
    var pointA = a.toString().indexOf('.');
    var pointB = b.toString().indexOf('.');
    var expendA = Math.pow(10,a.toString().length-pointA+1);
    var expendB = Math.pow(10,b.toString().length-pointB+1);
    return ((a*expendA)*(b*expendB))/(expendA*expendB);
}

发表于 2016-08-06 14:23:09 回复(0)
    function len(num) {
        var str = num.toString();
        var index = str.indexOf('.');
        return index == -1 ? 0 : str.length - index - 1;
    }

    function solution(a, b) {
        var length = Math.pow(10, len(a) +len(b));
        return a * length * b / length;
    }

    console.log(solution(0, 0.001));
    console.log(solution(0.001, 0.001));
    console.log(solution(3, 0.001));
    console.log(solution(1000, 0.001));

发表于 2016-07-24 15:19:13 回复(0)