深入理解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 相关文章推荐
jquery 新浪网易的评论块制作
Jul 01 Javascript
formValidator3.3的ajaxValidator一些异常分析
Jul 12 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
Mar 13 Javascript
JS数组array元素的添加和删除方法代码实例
Jun 01 Javascript
js绘制购物车抛物线动画
Nov 18 Javascript
Vue.JS入门教程之处理表单
Dec 01 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
Jan 23 Javascript
微信小程序对接七牛云存储的方法
Jul 30 Javascript
微信小程序实现倒计时补零功能
Jul 09 Javascript
前端防止用户重复提交js实现代码示例
Sep 07 Javascript
JavaScript"模拟事件"的注意要点详解
Feb 13 Javascript
d3.js实现图形拖拽
Dec 19 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图片裁剪函数(保持图像不变形)
2014/05/04 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
Python创建xml的方法
2015/03/10 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
pandas数据集的端到端处理
2019/02/18 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
美国在线家装零售商:Build.com
2016/09/02 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
实习自荐信
2013/10/13 职场文书
广告语设计及教案
2014/03/21 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书