js中0.1+0.2 == 0.3吗?
那么如何判断两个浮点数直接相等呢?
1、精度判断法
2、使用toFixed()方法
toFixed()方法可以把Number四舍五入为指定小数的数字。
语法
NumberObject.toFixed(num)//num代表要保留的小数位数。
但是toFixe存在不精准的问题:
解决方法:
重写toFixed()方法:
参考:
https://blog.csdn.net/undytk/article/details/88912386
https://blog.csdn.net/qq_33237207/article/details/81668457
JavaScript 是一门弱类型的语言,从设计思想上就没有对浮点数有个严格的数据类型,所以精度误差的问题就显得格外突出。下面就分析下为什么会有这个精度误差,以及怎样修复这个误差。首先,我们要站在计算机的角度思考 0.1 + 0.2 这个看似小儿科的问题。我们知道,能被计算机读懂的是二进制,而不是十进制,所以我们先把 0.1 和 0.2 转换成二进制看看:
0.1 =>0.0001 1001 1001 1001…(无限循环)
0.2 =>0.0011 0011 0011 0011…(无限循环)
双精度浮点数的小数部分最多支持 52 位,所以两者相加之后得到这么一串 0.0100110011001100110011001100110011001100110011001100 因浮点数小数位的限制而截断的二进制数字,这时候,我们再把它转换为十进制,就成了 0.30000000000000004。
原来如此,那怎么解决这个问题呢?我想要的结果就是 0.1 + 0.2 === 0.3 啊!!!
有种最简单的解决方案,就是给出明确的精度要求,在返回值的过程中,计算机会自动四舍五入,比如:
var numA = 0.1
var numB = 0.2
alert( parseFloat((numA + numB).toFixed(2)) === 0.3 )
乘法运算中有这种,比如0.58*100,结果是57.99999999999999。可以用Math.round()进行处理,
------||-------
尽量避免对小数进行操作,先处理成整数后在进行操作,其结果会比较精确。