当前位置: 首页 >文章 > JavaScript - 浮点数值
收藏
分享

JavaScript - 浮点数值

举报李游Leo李游Leo发布于 2021-05-251340阅读0点赞
所谓的浮点数就是包含了一个小数点,小数点后面必须至少有一个整数表示...

浮点数,是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。

不过说的简单一点,所谓的浮点数就是包含了一个小数点,小数点后面必须至少有一个整数表示。虽然小数点前方可以没有数字,但是这样会降低可读性,并不推荐。

例如:

当然数字也是有特别大的数值,一般情况下可以使用科学计数法,也就是用e表示。科学计数法实际使用起来也是非常简单的,实际使用的时候就是e前面的数值乘以10的指数次幂。在ECMAScript中的科学计数法使用起来也是如此,就算前面是整数或者浮点数都可以这样计算,科学计数法在使用起来不区分大小写,也就是E或者e都可以,后面是10的幂中的指数,使用该幂值与前面的数相乘即可。

例如:

我们拿最后一个例子为例,使用e表示的3.3E2,实际数值为330,计算方式为“3.3乘以102”。

除了表示很大的数值,我们也可以利用科学计数法来表示特别小的数值,比如0.0005,我们就可以使用5e-4表示。不过在一般默认情况下,ECMAScript会将那些小数点后面带有6个零以上的浮点数值转化为科学计数法,也就是用e表示,这个状态是默认的,比如0.0000005会自动转化为5e-7的写法。

虽然浮点数很好,但是也有一个致命的争议问题,因为浮点数值的最高精度是17位小数,但在进行算数计算时其精度远远不如整数。例如最常出现问题的计算就是0.1加0.2了,结果并不是0.3,而是0.30000000000000004。这个问题也是JavaScript的浮点数误差会导致无法测试特定的浮点数值,这个问题归结起来是ECMAScript浮点数机制问题。

上述例子中,我们测试到其和并不等于0.3。但是如果是0.05和0.25在或者是0.15都不会有问题。

原理是这样的,JavaScript内部采用的IEEE 754标准,number类型默认为双精度浮点型(64位),其实会有以下的问题:

1.首先我们都知道计算机内部存储是采用的二进制

2.将0.1转为二进制是无限循环小数,0.2也是无限循环小数

我们可以使用toString传入2的方法来获得数值的2进制,例如:

大家可以看出来二进制所获的长度是非常长的,而浮动点位数会有限制,当长度溢出之后就会默认做截取,从上面的输出中可以看出0.1+0.2转成二进制后大于0.3直接转二进制.不光小数,而当整数部分溢出也会出现截取现象。所以就会诞生出来计算不准确的现象。




本文原创,未经作者允许不可转载!

更多内容,欢迎关注作者微信公众号:李游Leo老师前端讲堂!


0条评论
别默默看啦~登录/注册一起参与讨论吧~

暂无评论

请选择举报理由

违反法律法规

侵犯个人权益

有害网站环境

更多训练营>>

为你推荐 · 训练营(全勤打卡报名费全额返累计全额返用户133,637人)

电商海报设计训练营
距离开班仅剩13天58人已报名
【5月】零基础手绘插画训练营
距离开班仅剩13天42人已报名
【5月】零基础动态表情包创作训练营
距离开班仅剩30天11人已报名
特惠
充值
7折购
今日还在继续学习的你,太棒了!
7
折扣券可用于
年费无限VIP
立 即
使 用
此活动优惠不可与其他活动叠加使用
有效期:000000
消息
登录即可查看消息记录
建议
意见
官方
客服
在线咨询客服热线

您可以与在线客服进行沟通获得帮助

工作日:9:00~22:00节假日:9:00~18:00

联系在线客服

您可以电话联系客服进行沟通获得帮助

工作日:9:30~18:30

400-862-9191
虎课
积分
免费学习89000+个教程!
配套素材、源文件一键下载!
昨日学员已学习了45,189
并提交了222份作业!
登录后立即学习!
loading
微信扫码关注即可登录
您需要同意协议才可以进行登录
登录虎课网,每天免费学课程全站 89000+ 视频会员教程 | 每日可免费学 1
为确保账户信息安全
请先进行真实姓名验证后进行充值付款
立即验证