深入理解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 相关文章推荐
Date对象格式化函数代码
Jul 17 Javascript
Javascript insertAfter() 实现函数代码
Oct 12 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
Apr 15 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
Dec 14 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
Jan 07 Javascript
jquery自适应布局的简单实例
May 28 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
Aug 01 Javascript
jQuery.parseHTML() 函数详解
Jan 09 Javascript
Mac下使用charles遇到的问题以及解决办法
Jan 10 Javascript
原生js实现鼠标跟随效果
Feb 28 Javascript
ES6新数据结构Set与WeakSet用法分析
Mar 31 Javascript
p5.js实现动态图形临摹
Oct 23 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 magic quotes的详解
2013/06/17 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
定义select的边框颜色
2008/04/28 Javascript
JS 判断代码全收集
2009/04/28 Javascript
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
详解javascript函数的参数
2015/11/10 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
python动态监控日志内容的示例
2014/02/16 Python
用python爬取租房网站信息的代码
2018/12/14 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
如何教少儿学习Python编程
2020/07/10 Python
CSS3+JavaScript实现炫酷呼吸效果的示例代码
2020/06/15 HTML / CSS
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
异步传递消息系统的作用
2016/05/01 面试题
《晏子使楚》教学反思
2014/02/08 职场文书
班组长竞聘书
2014/03/31 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
详解python网络进程
2021/06/15 Python
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS