美文网首页
js浮点数精度误差问题,解决方法

js浮点数精度误差问题,解决方法

作者: 自由加咖啡 | 来源:发表于2017-02-13 17:37 被阅读105次

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()进行处理,

------||-------
尽量避免对小数进行操作,先处理成整数后在进行操作,其结果会比较精确。

相关文章

  • js浮点数精度误差问题,解决方法

    JavaScript 是一门弱类型的语言,从设计思想上就没有对浮点数有个严格的数据类型,所以精度误差的问题就显得格...

  • js精度问题

    关于js浮点数计算精度不准确问题的解决办法 今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一...

  • 1.3 Float 浮点型

    浮点型,也叫浮点数float、双精度数double或实数real。 浮点数在精度上会存在一些误差,所以永远不要相信...

  • js处理浮点数计算误差(精确度)

    js处理浮点数计算误差众所周知, 浮点计算会产生舍入误差的问题, 比如, 0.1 + 0.2, 结果应该是0 .3...

  • JS中如何理解浮点数?

    本文由云+社区发表 相信大家在平常的 JavaScript 开发中,都有遇到过浮点数运算精度误差的问题,比如 co...

  • iOS 浮点数的精确计算和四舍五入问题

    iOS开发中,使用浮点数(float,double)类型运算需要注意计算精度的问题。即使只是两位小数,也会出现误差...

  • php面试题:浮点数

    浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为...

  • JavaScript浮点数的精度问题深究

    JavaScript浮点数的精度问题 javascript浮点数的精度问题是老生常谈了,但往往只知道0.1 + 0...

  • js浮点数精度计算问题

    前言 项目中,总是不可避免会出现js的浮点数精度计算问题。抛出经典问题:为什么0.1===0.1,0.1+0.2!...

  • JS之舍入误差

    起因: 在JS中这叫舍入误差 解决方法: toFixed();

网友评论

      本文标题:js浮点数精度误差问题,解决方法

      本文链接:https://www.haomeiwen.com/subject/dsrtwttx.html