思路:首先将两个数转换为字符串,然后分别获取两个数的小数点后的位数,并取最精确的小数位数,再将乘法结果指定小数点后的数字位数。
function multiply(a, b) { //先将两个数转换成字符串 let str1=a.toString() let str2=b.toString() //获取小数点后的位数 let lenA=(str1.indexOf('.')==-1)?0:(str1.length-1-str1.indexOf('.')) let lenB=(str2.indexOf('.')==-1)?0:(str2.length-1-str2.indexOf('.')) //取最精确的小数位数 let len=Math.max(lenA,lenB) //把数字指定小数点后的数字位数 return (a*b).toFixed(len) }
总结:由于乘法涉及到精度问题,故需要对数字进行处理。求小数点后的位数可以先将数字转换为字符串,然后使用indexOf查找.所在的位置,如果没找到就是0,反之就根据字符串长度以及.所在的位置计算小数位,一定要取两者中最精确的那一位,最后使用n.toFixed(len)方法,指定n的小数位数为len位。