javascirpt 为什么 0.3-0.2,0.3-0.1结果不准确,js还有哪些诸如此类的bug,另外用vue写股票实时数据这种页面除了定时器获取数据渲染页面,还有什么好的方法
javascirpt 为什么 0.3-0.2,0.3-0.1结果不准确,js还有哪些诸如此类的bug,另外用vue写股票实时数据这种页面除了定时器获取数据渲染页面,还有什么好的方法
计算机计算浮点数的时候是要转换成二进制的,二进制的0.3和0.2分别是
0.010011001100110...........
0.001100110011001................
很长的一段,计算机存储位数有限,加完之后再转换成10进制时就出现那种0.099999.....的情况
这是原来看到的代码,先将小数转换成整形,计算结束后再转换回去
function add(num1, num2){
let r1, r2, m;
r1 = (''+num1).split('.')[1].length;
r2 = (''+num2).split('.')[1].length;
m = Math.pow(10,Math.max(r1,r2));
return (num1 * m + num2 * m) / m;
}
console.log(add(0.1,0.2)); //0.3
console.log(add(0.15,0.2256));
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
(0.3 * 10 + 0.2 * 10) / 10
,即先转换成整数js 缺陷 陷阱
等关键字,会找到你想要的