深入理解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 checkbox全选/取消全选实现代码
Nov 14 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
Jul 22 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
Feb 27 Javascript
别了 JavaScript中的isXX系列
Aug 01 Javascript
jQuery easyui datagrid动态查询数据实例讲解
Feb 26 Javascript
jQuery实现手机自定义弹出输入框
Jun 13 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
Nov 16 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
Feb 24 Javascript
vue实现固定位置显示功能
May 30 Javascript
Vue快速实现通用表单验证的方法
Feb 24 Javascript
原生js实现日期选择插件
May 21 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
在PHP中读取和写入WORD文档的代码
2008/04/09 PHP
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
如何使用php输出时间格式
2013/08/31 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
jquery解析XML字符串和XML文件的方法说明
2014/02/21 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
vue router demo详解
2017/10/13 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
新手该如何学python怎么学好python?
2008/10/07 Python
详解python调度框架APScheduler使用
2017/03/28 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
Blancsom美国/加拿大:服装和生活用品供应商
2018/07/27 全球购物
Internet体系结构
2014/12/21 面试题
物业经理自我鉴定
2014/03/03 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python