JavaScript 浮点运算
参考资料:
你知道 0.1+0.2 !==0.3是进制问题,但你讲不出个所以然,是吧?
用了一天时间,我终于彻底搞懂了 0.1+0.2 是否等于 0.3!
进制转换
二进制->十进制
a * 10^3 + b * 10^2 + c * 10^1 + d * 10^-1
十进制-> 二进制
整数部分:除二取余,从下往上读
小数部分:乘二取整,从上往下读
十进制浮点数转换二进制后尾数的 52 位 有效数字是从第一个 1 开始向后保留 52 位 有效数字,这个1不算在52位之内
数据存储
IEEE 754 中双精度浮点数使用 64 bit 来进行存储:
符号位:1位,表示正负号 0 正 1 负
指数位:2-12位,表示次方数
尾数位:13-64位,表示精确度
尾数位只有 52 位,但是我们现在在第一个 1 后面保留 52 位 有效数字,那再加上前面的 1 不就是 53 位 位了吗?
这是因为,尾数部分的整数部分一定是一个 1,那为了充分利用 52 位 空间表示更高的精确度,可以把一定等于 1 的整数部分省略,52 位 都用来表示小数。
浮点运算
- JavaScript采用 IEEE 745 标准的浮点数运算,会产生舍入误差
- 浮点数先转换为二进制,再运算
0.1 化为二进制:
0.000 11001100 11001100 11001100 11001100 11001100 11001100 1100 1100 11
0.1 保留52位有效数字:
0.000 11001100 11001100 11001100 11001100 11001100 11001100 1101 0
0.2 化为二进制:
0.00 11001100 11001100 11001100 11001100 11001100 11001100 1100 1100 11
0.2 保留52位有效数字:
0.00 11001100 11001100 11001100 11001100 11001100 11001100 1101 0
0.1+0.2:
0.000 11001100 11001100 11001100 11001100 11001100 11001100 1101 0
0.001 10011001 10011001 10011001 10011001 10011001 10011001 1010
——————————————————————————————————
0.0 10011001 10011001 10011001 10011001 10011001 10011001 1001 110
保留52位尾数
0.0 10011001 10011001 10011001 10011001 10011001 10011001 1010 0
转十进制
0.30000000000000004
JavaScript 浮点运算相关推荐
- 关于 JavaScript 浮点运算的精度解决方案
问题背景 在 chrome 浏览器中调出开发者工具,在控制台窗口输入下面的表达式: 0.1 + 0.2 // 期望:0.3,结果:0.30000000000000004 这就是 JavaScript ...
- JavaScript浮点运算0.2+0.1 !== 0.3
浮点运算JavaScript 本文主要讨论JavaScript的浮点运算,主要包括 JavaScript number基本类型 二进制表示十进制 浮点数的精度 number 数字类型 在JavaScr ...
- javascript小数相减会出现一长串的小数位数的原因
javascript小数相减会出现一长串的小数位数的原因 <script> var a='38.8'; var b='6.8'; alert(parseFloat(a)-parseFloa ...
- jquery easyui 操作总结
2019独角兽企业重金招聘Python工程师标准>>> src:http://lhdst-163-com.iteye.com/blog/1707232 1.dialog Java代码 ...
- JS浮点数运算Bug的解决办法(转自百度文库)
37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只 ...
- 谈 JavaScript 浮点数计算精度问题(如0.1+0.2!==0.3)
不知道大家在使用JS的过程中有没有发现某些浮点数运算的时候,得到的结果存在精度问题:比如0.1 + 0.2 = 0.30000000000000004以及7 * 0.8 = 5.60000000000 ...
- 由parseInt 引发的问题---想到浮点运算精度丢失---看透js number 的 encoded
如题 先陈述下问题背景 偶尔测测自己写的计算器,随便输入玩嘛,然后发生下面诡异的事情: 当我从一个 1 输入到十个 1 的时候,过程显示都是正确的,像这样: 继续输入一个 1 的时候,然后就这个样子了 ...
- 在JavaScript中使用正好两位小数格式化数字
我有这行代码将我的数字四舍五入到小数点后两位. 但是我得到这样的数字:10.8.2.4等.这些不是我对小数点后两位的想法,因此我如何改善以下内容? Math.round(price*Math.pow( ...
- Javascript中的陷阱大集合【译】
参考:http://www.2cto.com/kf/201111/111203.html 昨天晚上在自己的个人技术博客上翻译了一篇有关Javascript的文章,今天想想还是把它投稿到博客园吧,大家可 ...
- 《JavaScript高级程序设计 第3版》-学习笔记-1
P1-P30页 1.<script>标签的属性 async:async(html) | async="async"(xhtml),表示立即下载脚本,但不马上执行(执行 ...
最新文章
- Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍
- linux中的nm命令
- 今天直播 | 融合媒体智能升级秘钥!
- 评估数据源是否回溯_IAI Trade:蒙特卡洛模拟在回溯检验中的应用
- SegmentFault Hackathon 文艺复兴
- ubuntu 安装fcitx输入法(3.6和4.0bate)
- 大数据从哪里来?| 技术头条
- 使用uiautomator2进行webview页面的测试
- preg_match进行正则表达式匹配
- Facebook正测试对话式的评论新界面
- The Bits(找规律)
- wordpress php 模板修改,教你如何修改wordpress模版技巧分享
- vc2012编译thrift
- ee er_英语单词说文解字—第32节 后缀er和ee的构词
- iOS 本地通知基本使用
- sklearn机器学习笔记:数据预处理与特征工程
- 常用数据库及默认端口
- SCRAPY爬虫实例
- python在线翻译小程序_Python爬虫学习之翻译小程序
- 免息贷款但有手续费的年化利率计算方法及Java实现;
热门文章
- 不动点求数列通项原理_【数列】浅谈“不动点”求数列通项的方法
- Springboot 整合Rabbit MQ
- B. Diverse Garland
- 如何将一张光盘制作成ISO镜像文件
- win10 hao123劫持html文件,Win10 edge浏览器主页被hao123劫持怎么解决?
- html制作钢铁侠心脏,钢铁侠胸部的“心脏”并非特效,那是怎么放进身体的?...
- Cisco 交换机的操作
- Win32基础学习笔记
- ESXi5安装vib格式驱动
- python f检验 模型拟合度_python 线性回归分析模型检验标准--拟合优度详解