BCSP-X · 2024 BCSP-X 上半年活动基础知识测评(小学高年级组) 第 7 题

选择题 · 答案 D

← 整套速查表 BCSP-X 全部真题

题目

设变量 $x$ 为 float 类型且已赋值,则以下语句能将 $x$ 中的数值四舍五入到小数点后第 $2$ 位的是( )。

答案:D

解题思维

别被浮点数骗了,核心就是看它有没有真正‘截断’小数。把 x 放大 100 倍后加 0.5 再取整,这才是四舍五入的精髓,最后别忘了缩回去。

常见错误

最容易栽跟头的是忽略类型转换。选项 B 里 0.5/100.0 先算出来是个极小的浮点数,直接加到 x*100 上,根本没起到‘进位’的作用,结果还是截断。选项 A 同理,虽然加了 0.5,但除以 100.0 又变回浮点,小数部分还在,赋给 x 后依然有无数位。只有用 (int) 强转成整数,才能把多余的小数彻底砍掉,这才是四舍五入的关键一步。

详细解析(节选)

这道题考的是浮点数四舍五入的实现原理,核心知识点是类型转换((int))对小数部分的截断作用,以及运算符优先级。命题人特别喜欢在选项里把‘放大、加 0.5、缩小’这三个步骤拆开,或者用浮点运算代替整数截断来挖坑,看学生是否真正理解‘四舍五入’在计算机里是怎么落地的。

拿到题先想什么?四舍五入到小数点后两位,本质就是保留前两位,后面的全部扔掉。怎么扔?用取整函数,比如 (int)。但直接取整是‘去尾法’,要变成‘四舍五入’,得先给小数部分加 0.5,让需要进位的数跨过整数边界,然后再取整。

具体怎么算?把 x 放大 100 倍,让小数点后两位变成整数部分;加 0.5 实现四舍五入;用 (int) 取整,把多余的小数砍掉;最后再除以 100.0,把数值缩回原来的量级。整个过程必须严格保证中间步骤是整数运算,否则浮点误差会让四舍五入失效。

逐项看: A 项 x = (x * 100 + 0.5) / 100.0;括号里确实放大了,也加了 0.5,但最后除以的是 100.0(浮点),结果还是浮点数,小数部分没被砍掉,错误。 B 项 x = x * 100 + 0.5 / 100.0;运算符优先级里除法高于加法,0.5/100.0 先算,是个极小的浮点数,加到 x*100 上毫无意义,根本没起到四舍五入作用,错误。 C 项 x = (x / 100 + 0.5) * 100.0;这是把小数点往左移两位再加 0.5,逻辑完全反了,错误。 D 项 x = (int)(x * 100 + 0.5) / 100.0;先看 (int)(x * 100 + 0.5),这里强制类型转换优先级最高,先算括号里的表达式,得到整数,小数部分被彻底截断;再除以 100.0,恢复量级。完美符合四舍五入定义,正确。

避坑:很多学生会以为‘加 0.5 就能四舍五入’,忘了计算机里浮点数没有‘四舍五入’这个操作,必须靠类型转换强制截断。另外要注意 (int) 的优先级比 + 高,所以 (int)(x*100+0.5) 是整体取整,而不是先取整再计算,这点极易看错。

考频与趋势:BCSP 近五年纯概念/计算单选题中,浮点数四舍五入相关考点出现约 8 次,集中在第 6-8 题位置,属于高频必考点。往年多考‘放大加 0.5 取整’的基本模型,偶尔会换皮成‘保留三位小数’或‘向下取整’。暂无足够依据预测未来会考更复杂的浮点误差累积或自定义舍入规则,大概率仍会围绕基础模型变式出题。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断