深入理解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 相关文章推荐
js模拟类继承小例子
Jul 17 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
Sep 03 Javascript
JQuery中的html()、text()、val()区别示例介绍
Sep 01 Javascript
JS动态显示表格上下frame的方法
Mar 31 Javascript
原生js实现移动端瀑布流式代码示例
Dec 18 Javascript
jQuery+css3实现转动的正方形效果(附demo源码下载)
Jan 27 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
Jun 20 Javascript
浅谈Vue的基本应用
Dec 27 Javascript
Bootstrap布局之栅格系统学习笔记
May 04 Javascript
vue实现密码显示隐藏切换功能
Feb 23 Javascript
详解关于element el-button使用$attrs的一个注意要点
Nov 09 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
May 22 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
PHP遍历数组的方法汇总
2015/04/30 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
js脚本实现数据去重
2014/11/27 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
js 获取今天以及过去日期
2017/04/11 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
Jquery异步上传文件代码实例
2019/11/13 jQuery
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
pyqt和pyside开发图形化界面
2014/01/22 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
python类共享变量操作
2020/09/03 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
专科毕业生求职简历的自我评价
2013/10/12 职场文书
拓展训练激励口号
2014/06/17 职场文书
防火标语大全
2014/10/06 职场文书
销售督导岗位职责
2015/04/10 职场文书
经费申请报告
2015/05/15 职场文书
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
微信小程序调用python模型
2022/04/21 Python