练习牛客网笔试题--前端js--46-乘法
// 题目描述
// 求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题
// 输入 3, 0.0001
// 输出 0.0003
1.自己的练习
(有局限)
function multiply(a, b) {
return (a * 100) * (b * 100) / 10000;
}
2.题解
// 1.有小数扩大对应倍数最后在除掉
function multiply(a, b) {
var f1 = 1, f2 = 1;
// 如果存在小数点则乘以他的0的个数
// f1,f2分别存储a,b的倍数,最后先算a*b扩大的再除以抵消掉
if (String(a).indexOf(".") != -1) {
f1 = String(a).length - String(a).indexOf(".") + 1
f1 = Math.pow(10, f1)
a = a * f1
}
if (String(b).indexOf(".") != -1) {
f2 = String(b).length - (String(b).indexOf(".") + 1)
f2 = Math.pow(10, f2)
b = b * f2
}
return a * b / f1 / f2
}
// 2. toFixed() 方法使用定点表示法来格式化一个数值。参数:小数点后数字的个数。(有局限)
function multiply(a, b) {
var aDec = a.toString().split('.')[1] || '';
var bDec = b.toString().split('.')[1] || '';
var fix = aDec.length + bDec.length;
return (a * b).toFixed(fix)
}