js处理双精度误差
来源:互联网 发布:oracle数据库分页查询 编辑:程序博客网 时间:2024/05/18 02:21
浮点数误差产生的原因
eg:
0.1+0.2=?
0.1+0.2=0.3? 我门先来看一段JS. console.log(0.1+0.2); 输出为0.30000000000000004 其实对于浮点数的四则运算,几乎所有的编程语言都会累死京都误差的问题,只不过c++/java/c#这些语言中已经封装好了解决的办法,二javascript是一门若类型语言,从设计思想上就没有对浮点数有个严格的数据类型,所以京都误差的问题就显得格外突出。下面我们就分析一下为什么会有这个京都误差,以及怎样修复这个误差。
首先,我们要站在计算机的角度去思考0。1+0。2这个看似小儿科的问题。我们知道,能被计算机读懂的是二进制,而不是十进制,所以我们先把0.1和0.2转换成二进制看看:
0.1 => 0.0001100110011001…无限循环
0.2跟0.1一样无限循环上面我们发现0.1和0.2转化为二进制之后,变成了一个无限循环的数字,这在现实生活中,无限循环我们可以理解,但计算机是不允许无限循环的,对于无限循环的小数,计算机会进行舍入处理。进行双精度浮点数的小数部分最多支持
52 位,所以两者相加之后得到这么一串
0.0100110011001100110011001100110011001100110011001100 因浮点数小数位的限制而截断的二进制数字,这时候,我们再把它转换为十进制,就成了 0.30000000000000004。
解决方法
知道了浮点数产生的原因了,那么怎么处理这个问题呢?
方法一:指定要保留的小数位数(0.1+0.2).toFixed(1) =
0.3;这个方法toFixed是进行四舍五入的也不是很精准,对于计算金额这种严谨的问题,不推荐使用,而且不通浏览器对toFixed的计算结果也存在差异。方法二:把需要计算的数字升级(乘以10的n次幂)成计算机能够精确识别的整数,等计算完毕再降级(除以10的n次幂),这是大部分编程语言处理精度差异的通用方法。
第三方转载
http://www.cnblogs.com/xinggood/p/6639022.html
- js处理双精度误差
- JS数字计算精度误差解决方法
- 精度误差
- 精度误差
- 误差和精度误差
- 潜在误差精度误差
- 测量,信号处理中的精度分析or误差传播理论
- 关于精度处理(浮点误差)的总结
- 计算几何 || 精度误差
- Js计算,精度丢失处理
- java double相加精度误差
- js 对小数加法精度处理
- 单因素、双因素方差分析、误差处理
- js处理浮点型的bug问题--js精度丢失
- 双精度浮点数的加法计算误差及其避免的初步方法
- 三点法求三维坐标精度误差评估实验
- 精度、误差与分辨率的研究
- js 小数计算误差
- [Leetcode]_35 Search Insert Position
- python---字典
- 设计模式之装饰者模式 三
- 二分图 hdu 1054 Strategic Game
- Pandas的 loc iloc ix 区别
- js处理双精度误差
- const
- C++ Primer学习笔记(unit 2 变量和基本类型
- Ubuntu 设置默认root模式登录
- ISBN码
- 爬虫模拟登录知乎
- CNN学习(一)
- reduce端join算法实现
- mongoose.model创建集合