Menu

四舍五入计算器

两侧的相邻值、精确的差距,以及每种规则如何处理正好一半的情况。

作者 Nethanel Bar, 联合创始人兼 CEO

最后更新

想不用计算器也能解出这些题?

Coddy 数学课程教的是方法本身:你在交互式白板上完成每一步,哪一步出错都会准确告诉你。

取近似值是一次比较,而不是一条规则

给一个数取近似值,只需要两个候选:所选数位上紧挨在它下面的那个倍数,和紧挨在它上面的那个。3.472 保留一位小数,位于 3.4 和 3.5 之间,比 3.4 大 0.072,比 3.5 小 0.028,所以 3.5 胜出。“看下一位,满 5 就进一”正是这次比较的捷径,而且是非常好用的捷径。

只有在正中间,两个相邻值一样近时,这条捷径才真正需要做决定。这时答案确实取决于采用哪种规则,常用的有六种:学校教的四舍五入把中点向远离零的方向进位,银行把它舍入到偶数的相邻值,电子表格的 FLOOR 总是向下取,截断则直接舍去后面的部分。本页把六种规则对你输入的数逐一并排列出,因为这正是一个舍入工具应该回答的问题。

要看出中点情况,必须用精确运算。在二进制浮点数中,2.675 实际上是 2.67499999999999982…,所以几乎所有计算器、电子表格和编程语言都会把它舍入成 2.67,并坚称它根本不在中点。本页把数存成精确的分数,所以 2.675 就是中点,页面会如实告诉你,并解释为什么别的计算器结果不同。

需要注意的地方

  • 两个相邻值永远是你要保留的那一位的倍数。精确到十位时是 1270 和 1280;保留两位小数时是 2.67 和 2.68。
  • 起作用的只有距离,而不是数字本身。看数字的规则之所以成立,是因为 5 或更大的数字正好落在区间的后半段:它是这次比较的简写,而不是另一条定律。
  • 有效数字从第一个非零数字开始数,而不是从小数点开始。0.004567 保留两位有效数字是 0.0046,前面的零只是占位,不算有效数字。
  • 各种规则只在中点上才有分歧。不在中点时,四舍五入、银行家舍入和五舍入都给出相同的答案,所以大多数人从来没发现规则不止一种。
  • 学校的规则是“远离零”,而不是“趋向正无穷”。所以按这条规则 -2.5 舍入成 -3,而向上取整函数会给出 -2。
  • 分两次取近似值和一次取近似值不一样。2.446 保留两位小数是 2.45,再保留一位小数得 2.5;但原数直接保留一位小数是 2.4。

如何对一个数取近似值

  1. 确定要保留到哪一位

    可以是几位小数、某个数位(十位、百位),或者几位有效数字。无论选哪种,之后的做法都一样。

  2. 找出两个相邻值

    也就是该数位上紧挨在这个数下面的倍数和紧挨在上面的倍数。3.472 保留一位小数时,相邻值是 3.4 和 3.5。

  3. 看哪个更近

    可以比较两个距离(0.072 对 0.028),也可以用捷径:看该数位后面的第一个数字,满 5 就进一。两种方法回答的是同一个问题。

  4. 如果恰在中点,就按约定的规则处理

    学校的规则是远离零进位:2.5 变成 3,-2.5 变成 -3。统计学家和银行常常改为舍入到偶数的相邻值,所以 2.5 变成 2,3.5 变成 4。

  5. 保留所精确到的数位

    1274 精确到百位是 1300,而不是 13。这些零是有意义的:它们说明答案精确到哪一位。

同样的数,四种取近似的方式

对每个数位都按四舍五入(满 5 进一)处理。注意那些没有变的数:它们本来就是该数位的整倍数。

数1 位小数2 位小数精确到十位2 位有效数字
3.4723.53.4703.5
2.6752.72.6802.7
12741274127412701300
0.0045670000.0046
-2.5-2.5-2.50-2.5
9.96109.961010
0.50.50.500.5
149.5149.5149.5150150

例题详解

3.472 保留一位小数

plain
3.472

相邻值是 3.4 和 3.5,距离分别是 0.072 和 0.028,所以 3.5 更近,它就是答案。捷径得出的结论一样:十分位后面的数字是 7,满 5,所以进一。舍入误差是 0.028,这就是“保留一位小数”的代价。

计算器都看不出的中点:2.675 保留两位小数

plain
2.675

按精确值存储时,这个数正好位于 2.67 和 2.68 的中间。四舍五入把它进到 2.68;银行家舍入会把它舍入到偶数的相邻值,同样是 2.68;五舍入则得到 2.67。你的手机几乎肯定显示 2.67,因为在二进制中,2.675 存储的值略小于中点。

负数的中点:-2.5 精确到整数

plain
-2.5

学校的规则看的是数字,所以远离零进位:-3。向上取整趋向正无穷,得 -2;向下取整得 -3;截断直接舍去 .5,得 -2。四个都说得通的答案,这正是必须事先说明规则的原因。

有效数字:0.004567 保留两位

plain
0.004567

从 4 开始数,所以两位有效数字是 4 和 6,决定舍入的是后面的 7:进一得 0.0046。前面三个零不算有效数字,它们只是占位,告诉你这个数的位置。

连续进位:9.96 保留一位小数

plain
9.96

相邻值是 9.9 和 10.0,9.96 离后者更近,所以答案是 10,进位一直传到个位。这种情况最容易出错,因为舍入位前面的数字也变了。

什么都不用做:149.5 保留一位小数

plain
149.5

149.5 本来就是 0.1 的整倍数,没有两个相邻值需要选择,所以原样返回,舍入误差为零。精确到十位就不一样了:那正好是中点,四舍五入得 150。

常见错误

  • 分步取近似值。每次都要从原数出发:2.446 先保留两位小数再保留一位得 2.5,但直接保留一位小数是 2.4。
  • 丢掉占位的零。1274 精确到百位是 1300;写成 13 就让这个数差了一百倍。
  • 从小数点开始数有效数字。0.004567 的第一个有效数字是 4,所以两位有效数字是 0.0046,而不是 0.00。
  • 以为计算器处理中点的方式就是数学本身。电子表格的 ROUND 把中点向远离零的方向进位,Python 的 round() 则舍入到偶数,两者都说得通:分歧在于约定,而不是对错。
  • 对负数把“进一”理解成“趋向正无穷”。按学校的规则 -2.5 变成 -3,因为看数字的规则只看大小,不管符号。
  • 忘了近似数只是近似值。一旦写下 3.5,那 0.028 就永远丢了,所以要在计算的最后取近似值,绝不要在中间。

四舍五入常见问题

怎么把一个数保留到某一位小数?

看你要保留的那一位后面的第一个数字。满 5 就进一,否则舍去。3.472 保留一位小数时,下一位是 7,所以答案是 3.5。换一种更本质的说法:在 3.4 和 3.5 中选更近的那个。

5 总是进一吗?

按学校教的规则,是的。而单独一个 5 正是两个相邻值一样近的唯一情况,所以这条规则是一种约定,而不是事实。还有其他广泛使用的约定:舍入到偶数的相邻值、向下舍入,或者向零舍入。

什么是银行家舍入?为什么要用它?

即四舍六入五成双:中点舍入到偶数的相邻值,所以 2.5 变成 2,3.5 变成 4。中点总是进一,会让一长列数据整体偏大;让其中一半向下舍,就能抵消这种偏差。它是 IEEE 浮点数和一些统计软件的默认方式。

怎么保留有效数字?

从第一个非零数字开始数,而不是从小数点开始,然后在那一位上取近似值。0.004567 保留两位有效数字是 0.0046,123456 保留三位是 123000。本页会替你算出那一位在哪里,再按常规方法取近似值。

为什么我的计算器说 2.675 舍入后是 2.67?

因为它存的根本不是 2.675。在二进制浮点数中,这个值存储为 2.67499999999999982…,确实小于中点,所以计算器对它实际存的数舍入是正确的。本页把数存成精确的分数,所以能看出计算器看不到的中点。

负数怎么取近似值?

取决于约定,这正是本页把六种规则都列出来的原因。学校的规则远离零进位,-2.5 得 -3。向上取整趋向正无穷(-2),向下取整趋向负无穷(-3),截断则趋向零(-2)。

取近似值和截断有什么区别?

截断不管后面是什么,一律舍去:3.99 截断到整数是 3。取近似值选的是更近的相邻值,所以 3.99 变成 4。截断更快,但总是偏向零,所以用在循环计数器里没问题,用在金额上就很危险。

计算中应该在哪一步取近似值?

在最后一步。对中间结果取近似值会丢掉你还需要的信息,误差还会累积。这也是为什么这些页面上的精确答案会一直保留分数和根式,直到你要求小数为止。

更多数学工具

Coddy 编程语言插图

和 Coddy 一起学数学

开始