原因分析:
在开发中遇到了浮点数转换为百分数的问题,用浮点数乘以100结果产生了一堆小数位。查资料发现原因是由于计算机计算会先把数字转换成二进制计算,然后在转换为10进制,导致精度丢失。
在计算机角度,计算机算的是二进制,而不是十进制。二进制后变成了无线不循环的数,而计算机可支持浮点数的小数部分可支持到52位,所有两者相加,在转换成十进制,得到的数就不准确了,加减乘除运算原理一样。
例如:
let num1=0.28;
let num2=num1*100;
console.log(num1) // 0.28
console.log(num2) // 28.00000000000004再比如:
0.1+0.2 !== 0.3 //嗯,逐渐离谱了......
解决办法
1、强制取整
let num2=parseInt(num1*100);
console.log(num2) // 28