首页
题库
面试
求职
学习
竞赛
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收藏
1864浏览
热门推荐
相关试题
SQL中修改表结构的语句是下列哪一个()
测试工程师
测试开发工程师
中国电子云
2021
评论
(0)
下列哪两个变量之间的相关程度高
数据分析师
途虎
2021
评论
(4)
来自
途虎养车2023秋招数据...
双十一促销活动,单次消费500元及...
测试工程师
测试开发工程师
中国电子云
2021
评论
(8)
关于 CSS 选择器,以下说法正确的是:
360集团
运维工程师
前端工程师
2019
系统工程师
CSS
中国电子云
2021
评论
(63)
来自
中国系统2023校园招聘...
在css选择器当中,优先级排序正确的是
前端工程师
中国电子云
2021
评论
(1)
来自
中国系统2023校园招聘...
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题