一、前端程序员送命题 0.1 + 0.2 = ?
image.png二、为什么会出现如此无法理解的答案?
我Google了一下,发现原来这是JavaScript浮点运算的一个bug。
比如:7*0.8 JavaScript算出来就是:5.6000000000000005
网上找到了一些解决办法,就是重新写了一些浮点运算的函数。
Math.pow
例如:Math.pow(4,3);返回4的三次方,
用法:Math.pow(x,y)
思路如下
1、首先截取两个小数的小数位
2、Math.max
取二者之间的较大值作为平方数
3、Math.pow
求一个值为10的n次方(n就是两个数的小数位较大值)
// 处理小数相加出现超长小数的问题
export function addNum(num1, num2) {
let sq1, sq2, m;
try {
sq1 = num1.toString().split(".")[1].length;
} catch (e) {
sq1 = 0;
}
try {
sq2 = num2.toString().split(".")[1].length;
} catch (e) {
sq2 = 0;
}
m = Math.pow(10, Math.max(sq1, sq2));
return (num1 * m + num2 * m) / m;
}
网友评论