JavaScript计算精度问题解决方案
来源:互联网 发布:动画短片制作软件 编辑:程序博客网 时间:2024/06/04 19:03
先来看一个案列:
执行上述代码,在控制台显示的结果应该是多少呢?不少人大概会说,等于0.3啊。先不说对错,让我们来看下结果:
很明显,结果和预想的不一样。为什么会造成这个结果呢?其实对于浮点数的四则运算,几乎所有的编程语言都会有类似精度误差的问题,只不过在 C++/C#/Java 这些语言中已经封装好了方法来避免精度的问题,而 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.3呢,有一个很简单的方法,是使用.toFixed()方法获取制定经度的数值,如:
得到的结果就是0.30,toFixed方法中的参数代表需要保留的小数位数。
但是这个方法不是一劳永逸的,所以就需要一个方法来帮助我们处理精度问题,下面是一个通过借鉴和参考相关资料写出来的方法:
执行得到的结果就是0.3了。
这个方法是什么意思呢?为了避免产生精度差异,我们要把需要计算的数字乘以 10 的 n 次幂(这里面的n依据计算式中的最多小数的位数),换算成计算机能够精确识别的整数,然后再除以 10 的 n 次幂,大部分编程语言都是这样处理精度差异的,我们就借用过来处理一下 JS 中的浮点数精度误差。
- JavaScript计算精度问题解决方案
- JavaScript小数计算精度丢失问题解决方案
- JS的浮点数计算精度丢失问题解决方案
- js精度问题解决方案
- javascript精度计算
- js数据运算精度问题解决方案
- double运算丢失精度问题解决方案.
- javaScript中Float精度计算
- javascript onmouseout问题解决方案
- javascript onmouseout问题解决方案
- javascript onmouseout问题解决方案
- javascript onmouseout问题解决方案
- javascript数值计算得注意精度问题
- QTP业务参数计算问题解决方案
- 精度计算
- 关于JavaScript中计算精度丢失的问题(一)
- 关于JavaScript中计算精度丢失的问题(二)
- javascript中对数值计算控制精度的函数
- zookeeper的安装目录调整
- caffe安装系列——安装python依赖包
- 编译型语言与解释型语言简析
- dp2之多重背包
- html页面导出word文档
- JavaScript计算精度问题解决方案
- 本地搭建SVN局域网服务器
- 谈谈代理外国软件的事
- 论一个优秀尘盒对扫地机器人的重要性
- 八大种排序算法【java实现】
- 一个图文混排问题的解决过程
- c#中接口的作用
- hightchart饼状图图例、内容放置在饼上
- Share Data(业务拆分到各个服务中时的数据共享)