深入理解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 相关文章推荐
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
May 06 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
May 12 Javascript
判断多个input type=file是否有已经选择好文件的代码
May 23 Javascript
原生javascript图片自动或手动切换示例附演示源码
Sep 04 Javascript
js购物车实现思路及代码(个人感觉不错)
Dec 23 Javascript
原生js实现移动开发轮播图、相册滑动特效
Apr 17 Javascript
BootStrop前端框架入门教程详解
Dec 25 Javascript
原生javascript实现图片放大镜效果
Jan 18 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
Mar 01 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
Nov 22 Javascript
jQuery实现动态添加和删除input框代码实例
Mar 29 jQuery
node后端服务保活的实现
Nov 10 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 身份证号验证函数
2009/05/07 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
JavaScript中也使用$美元符号来代替document.getElementById
2010/06/19 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
2017/07/22 jQuery
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
python requests模拟登陆github的实现方法
2019/12/26 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
编辑求职信样本
2013/12/16 职场文书
文明生主要事迹
2014/05/25 职场文书
企业金融服务方案
2014/06/03 职场文书
护士医德医风自我评价
2014/09/15 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书