深入理解JavaScript中的浮点数


Posted in Javascript onMay 18, 2016

js只有一种数值型数据类型,不管是整数还是浮点数,js都把归为数字。

typeof 17;   // “number”

typeof 98.6; // “number”

typeof ?2.1; // “number”

js中的所有数字都是双精度浮点数。是由IEEE754标准制定的64位编码数字(这个是什么东东,不知道,回头查一下吧)

那么js是如何表达整数的,双精度浮点数可以完美地表示高达53位精度的整数(没有什么概念,没处理过多大的数据,没用完过!),从-9007199254740992(-253)到9007199254740992(253)的所有整数都是有效的双精度浮点数。

大多数算术运算符都可以使用整数、实数或两者的组合进行计算。

0.1*1.9    //0.19

-99+100  //1

21-12.3  //8.7

2.5/5   //0.5

21%8  //5

算术运算符比较特殊,js不会直接将操作数作为浮点数进行计算,而是将其隐式转换为32位整数后进行运算。(确切的说,会被转换为32位大端(big-endian)的2的补码表示的整数(实话说这里真的不知道是什么意思,求科普))以按位或运算表达式为

例:

8|1; //9

运算过程

首先8和1是双精度的浮点数。但也可以表示为32位整数,即32位的二进制表示。

整数8表示为32位二进制为:

0000 0000 0000 0000 0000 0000 0000 1000

也可能过

(8).toString(2); //”1000”

toString的参数是转换基数

(下面是我试的以其它基数转换的,和本文无关)

(8).toString(8); //”10”

(8).toString(16); //”8”

整数1表示为32位二进制为:

0000 0000 0000 0000 0000 0000 0000 0001

运行按位或

0000 0000 0000 0000 0000 0000 0000 1000

0000 0000 0000 0000 0000 0000 0000 0001

--------------------------------------------

0000 0000 0000 0000 0000 0000 0000 1001

同样的使用标准库函数parseInt验证,同样以2作为基数,前导0不影响运算结果,不必要。

parseInt('1001',2) //9

(下面是我试的以其它基数转换的,和本文无关)

parseInt('1001',8) //513

parseInt('1001',16) //4097

总结算术运算的过程就是,将操作数转换为整数,然后使用整数位模式进行运算,最后将结果转换为标准的js浮点数。

浮点数的警示:出了名的不精确。比如

0.1+0.2; //0.30000000000000004

原因:尽管64位浮点数精度已经很高,但双精度浮点数也只能表示一组有限的数字,而不能表示所有的实数集。浮点运算只能产生近似的结果,四舍五入到最接近的可表示的实数。当你执行一系列的运算,随着舍入误差的积累,运算结果会越来越不精确。舍入也使算术运算定律产生一些偏差。例如结合律。对于任意实数

x,y,z总满足(x+y)+z=x+(y+z)

浮点数就不一定:

(0.1+0.2)+0.3; //0.6000000000000001

0.1+(0.2+0.3); //0.6

浮点数权衡了精度和性能,关心精度时,要小心浮点数的局限性。

解决办法就是把浮点运算转化为整数运算。

(10+20)+30; //60

10+(20+30); //60

然后再除少放大倍数。要注意整数范围要在-253~253内。

总结

1、js的数字都是双精度的浮点数

2、js的整数仅仅是双精度浮点数的一个子集,不是单独的一个类型

3、位运算将数字视为32位的有符号整数

4、当心浮点运算的精度问题

以上这篇深入理解JavaScript中的浮点数就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JSONP获取Twitter和Facebook文章数的具体步骤
Feb 24 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
Dec 18 Javascript
javascript中createElement的两种创建方式
May 14 Javascript
js实现三张图(文)片一起切换的banner焦点图
Aug 25 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
Sep 22 Javascript
javascript事件绑定学习要点
Mar 09 Javascript
Javascript中的迭代、归并方法详解
Jun 14 Javascript
探索Javascript中this的奥秘
Dec 11 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
Feb 14 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
Feb 14 Javascript
第一个Vue插件从封装到发布
Nov 22 Javascript
微信小程序自定义底部弹出框动画
Nov 18 Javascript
Node.js返回JSONP详解
May 18 #Javascript
noty ? jQuery通知插件全面解析
May 18 #Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
May 18 #Javascript
jQuery实现图片向左向右切换效果的简单实例
May 18 #Javascript
JavaScript 基础函数_深入剖析变量和作用域
May 18 #Javascript
实现JavaScript的组成----BOM和DOM详解
May 18 #Javascript
深入理解JQuery中的事件与动画
May 18 #Javascript
You might like
simplehtmldom Doc api帮助文档
2012/03/26 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
jquery实现用户信息修改验证输入方法汇总
2015/07/18 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
用pycharm开发django项目示例代码
2019/06/13 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
Python使用Pygame绘制时钟
2020/11/29 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
法学专业自我鉴定
2014/02/05 职场文书
迎国庆演讲稿
2014/09/05 职场文书
校园广播稿精选
2014/10/01 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL