js如何返回输入两个数值的乘积_JavaScript : 两个数的精确乘法

工作中要处理两个数的乘法,网上搜索了没有找到满意的答案,然后根据网上提供的思路自己实现了一个,重点满足容错的要求,就是不会轻易报错。

主要算法是记录小数点后位数的总长度,然后将两个数转变成整数后相乘,再根据小数点后位数的总长度将乘积转变成小数。

代码如下:

/**

* 两个数的精确乘法

* @param v1

* @param v2

*

* 对于不能处理的问题,此方法一律返回 0

*

* @returns {number}

*/

function numberMultiplication (v1, v2) {

if (isNaN(v1) || isNaN(v2)) {

return 0

}

var isNegative = false;

if ((v1 < 0 && v2 >= 0) || (v1 >=0 && v2 < 0)) {

isNegative = true;

}

var f1 = '' + Math.abs(v1),

f2 = '' + Math.abs(v2);

var arr1 = f1.split('.'),

arr2 = f2.split('.');

var f11 = arr1[0],

f12 = 0,

f21 = arr2[0],

f22 = 0,

len1 = 0,

len2 = 0;

if (arr1.length >= 2) {

f12 = arr1[1];

len1 = f12.length;

}

if (arr2.length >= 2) {

f22 = arr2[1];

len2 = f22.length;

}

var x1 = 0,

x2 = 0;

if (f11 > 0) {

x1 = f1.replace('.', '');

} else {

x1 = f12;

}

if (f21 > 0) {

x2 = f2.replace('.', '');

} else {

x2 = f22;

}

var ret = x1 * x2 / Math.pow(10, len1 + len2);

if (isNegative) {

return -ret;

} else {

return ret;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值