首先看代码:
{
let a = 0.02;
let b = 0.0002;
console.log(a * b); //输出结果:0.000004000000000000001
}
这是因为JavaScript 里的数字是采用 IEEE 754 标准的 64 位双精度浮点数。该规范定义了浮点数的格式,对于64位的浮点数在内存中的表示,最高的1位是符号位,接着的11位是指数,剩下的52位为有效数字。
用一个函数实现小数的乘积运算:
{
function multiply(a, b) {
let alen = String(a).split(".")[1]; // 算出每个小数的小数点长度
let blen = String(b).split(".")[1];
let floatLen = alen.length + blen.length; //算出结果的小数点长度
return result = (a * b).toFixed(floatLen) //转化为已经知道的小数点长度的小数
}
console.log(multiply(0.01, 0.002)); //输出 0.00002
}