解决0.1+0.2 !== 0.3 浮点数经度问题
一.原生方法
使用Number.prototype.toFixed()这个方法了。
浮点数运算
toFixed() 方法
浮点数运算的解决方案有很多,这里给出一种目前常用的解决方案, 在判断浮点数运算结果前对计算结果进行精度缩小,因为在精度缩小的过程总会自动四舍五入。
toFixed() 方法使用定点表示法来格式化一个数,会对结果进行四舍五入。语法为:
JavaScript 代码:
numObj.toFixed(digits)
参数 digits 表示小数点后数字的个数;介于 0 到 20 (包括)之间,实现环境可能支持更大范围。如果忽略该参数,则默认为 0。
返回一个数值的字符串表现形式,不使用指数记数法,而是在小数点后有 digits 位数字。该数值在必要时进行四舍五入,另外在必要时会用 0 来填充小数部分,以便小数部分有指定的位数。 如果数值大于 1e+21,该方法会简单调用 Number.prototype.toString()并返回一个指数记数法格式的字符串。
特别注意:toFixed() 返回一个数值的字符串表现形式。
具体可以查看 MDN中的说明,那么我们可以这样解决精度问题:
JavaScript 代码:
<script>
parseFloat((数学表达式).toFixed(digits)) // toFixed() 精度参数须在 0 与20 之间
// 运行
parseFloat((0.1 + 0.2).toFixed(10))// 0.3
parseFloat((0.3 / 0.1).toFixed(10)) // 3
parseFloat((0.7 * 180).toFixed(10))// 126
parseFloat((1.0 - 0.9).toFixed(10)) // 0.1
parseFloat((9.7 * 100).toFixed(10)) // 970
parseFloat((2.22 + 0.1).toFixed(10)) // 2.32
</script>
二.手动转换
在进行浮点数进行计算时可以将浮点数转换为整数进行计算后再转为浮点数
((0.1*1000)+(0.2*1000))/1000 === 0.3