首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
下题的结果正确的是?varone=0.1vartwo=0.2
[单选题]
下题的结果正确的是?
var one = 0.1
var two = 0.2
var six = 0.6
var eight = 0.8
[two - one == one, eight - six == two]
[true, true]
[false, false]
[true, false]
other
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(100)
分享
纠错
4个回答
添加回答
14
牛客203067773号
0.2-0.1=0.1的原因是0.2是0.1的2倍,二进制乘2或者除2,左移或又移一位就行,所以0.2-0.1=0.1,但是0.8不是0.6的倍数,所以0.8-0.6!=0.2。
转自
(4条消息) 8.JS小数精度问题_萌神7号的博客-CSDN博客
,侵删
发表于 2021-07-02 14:21:20
回复(0)
4
PayneCen
JS不能很精确地表示小数。当两个浮点数相加或者相减,将有可能会导致精度丢失问题。
JS中的小数采用的是双精度(64位)表示的,由三部分组成:符 + 阶码 + 尾数,在十进制中的 1/10,在十进制中可以简单写为 0.1 ,但在二进制中,他得写成:0.0001100110011001100110011001100110011001100110011001……(后面全是 1001 循环)。因为浮点数只有52位有效数字,从第53位开始,就舍入了。这样就造成了“浮点数精度损失”问题。
通过上面分析,我们知道JS利用二进制存储的,所有的小数都可以用a0*(1/2)+a1*(1/4)+a2*(1/8)+…表示,这里(a0,a1,a2…只能取值0或者1),根据这个表达式我们发现0.1,0.2,0.6和0.8都是无限循环小数,但是0.2-0.1=0.1的原因是0.2是0.1的2倍,二进制乘2或者除2,左移或又移一位就行,所以0.2-0.1=0.1,但是0.8不是0.6的倍数,所以0.8-0.6!=0.2。
原文链接:
https://blog.csdn.net/weixin_43465339/article/details/108182482
发表于 2021-09-15 21:42:23
回复(0)
2
夜寻极光。
补充:要想后者为true
(
0.8
-
0.6
)
.
toFixed
(
1
)
发表于 2021-07-31 12:45:28
回复(0)
0
tritium_studio
等一个详细解答,js的浮点精度都知道有问题,实际上一般也都用tofix或者误差判断,但到底对于十进制运算哪些会丢失哪些不会真的就很难搞清楚,除非你自己算它二进制表示
我自己反正f12做了个穷举,对于浮点数
乘法是没有丢失的
除法是玄学。没看出规律
加法是玄学。没看出规律
减法两数比为2或1/2确实不丢失,但其他情况
也是玄学。没看出规律
拿有答案说的0.2-0.1是倍数说吧,0.9-0.2=0.7,这个也没有精度丢失,但不是倍数。如果我不直接用js算不知道怎么判断是否丢失呢?
发表于 2023-08-23 09:19:30
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
中国电子云
前端工程师
2021
来自:
中国系统2023校园招...
上传者:
小小
难度:
4条回答
100收藏
2173浏览
热门推荐
相关试题
SQL中修改表结构的语句是下列哪一个()
测试工程师
测试开发工程师
中国电子云
2021
评论
(0)
双十一促销活动,单次消费500元及...
测试工程师
测试开发工程师
中国电子云
2021
评论
(8)
五月份的商品销售额为60万元,该月...
数据分析师
途虎
2021
评论
(2)
来自
途虎养车2023秋招数据...
在JavaScript中,有var...
前端工程师
中国电子云
2021
评论
(3)
来自
中国系统2023校园招聘...
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题