问题
26.66022+10
结果:36.660199999
计算的数值不正确
原因
计算机中把数字转换成二进制进行存储,小数点后面的数值装换成二进制值时就不准确了。
解决
let max = this.FloatAdd(+this.lon, '10.00000');
let min = this.FloatDel(+this.lon, '10.00000');
FloatAdd(n1, n2) {
console.log(n1.toString().split(".")[1],n2.toString().split(".")[1])
//66022 00000
let pow = Math.max(
n1.toString().split(".")[1].length,
n2.toString().split(".")[1].length
);
let base = Math.pow(10, pow);
return (n1 * base + n2 * base) / base;
},
FloatDel(n1, n2) {
let pow = Math.max(
n1.toString().split(".")[1].length,
n2.toString().split(".")[1].length
);
let base = Math.pow(10, pow);
return (n1 * base - n2 * base) / base;
},