下面我将为您详细解释 round() 函数的用法、注意事项和一些高级技巧。

round() 函数的基本语法
round() 函数有两种基本形式:
只提供一个参数
round(number)
number: 你想要进行四舍五入的数字。- 返回值: 返回一个四舍五入后的整数,如果输入是浮点数,返回值也是浮点数(
0);如果输入是整数,返回值也是整数。
示例:
# 对正数进行四舍五入 print(round(3.3)) # 输出: 3 print(round(3.5)) # 输出: 4 (注意.5的情况,见下文“重要注意事项”) print(round(3.7)) # 输出: 4 # 对负数进行四舍五入 print(round(-3.3)) # 输出: -3 print(round(-3.5)) # 输出: -4 print(round(-3.7)) # 输出: -4 # 对整数进行“四舍五入”,它本身不变 print(round(10)) # 输出: 10
提供两个参数(指定保留的小数位数)
round(number, ndigits)
number: 你想要进行四舍五入的数字。ndigits: 一个整数,指定要保留的小数位数。- 返回值: 返回一个浮点数,保留
ndigits位小数。
示例:
# 保留 1 位小数 print(round(3.14159, 1)) # 输出: 3.1 # 保留 2 位小数 print(round(2.71828, 2)) # 输出: 2.72 # 保留 3 位小数 print(round(123.456789, 3)) # 输出: 123.457 # ndigits 是负数,则对小数点左侧进行四舍五入 print(round(12345, -1)) # 输出: 12340 (对十位进行四舍五入) print(round(12345, -2)) # 输出: 12000 (对百位进行四舍五入) print(round(12345, -3)) # 输出: 10000 (对千位进行四舍五入)
重要注意事项
注意事项 1:.5 的“银行家舍入法” (Banker's Rounding)
Python 的 round() 函数对于 .5 的情况,采用的是“银行家舍入法”(也叫“四舍六入五成双”或“round half to even”)。

- 规则:当要舍弃的部分正好是
5时,它会看保留的数字部分的最后一位是偶数还是奇数。- 如果是偶数,则向下舍入。
- 如果是奇数,则向上舍入。
- 目的:这种方法可以有效减少在大量连续运算中因传统四舍五入(逢5进1)而产生的系统性累积误差。
示例:
# 3.5,要保留的整数部分 3 是奇数,所以向上舍入到 4 print(round(3.5)) # 输出: 4 # 2.5,要保留的整数部分 2 是偶数,所以向下舍入到 2 print(round(2.5)) # 输出: 2 # 4.5,要保留的整数部分 4 是偶数,所以向下舍入到 4 print(round(4.5)) # 输出: 4 # 1.5,要保留的整数部分 1 是奇数,所以向上舍入到 2 print(round(1.5)) # 输出: 2
这个规则也适用于保留小数位数的情况:
# 保留一位小数 # 2.65,看第二位小数 5,第一位小数 6 是偶数,所以舍去 5,结果为 2.6 print(round(2.65, 1)) # 输出: 2.6 # 2.75,看第二位小数 5,第一位小数 7 是奇数,所以要进一,结果为 2.8 print(round(2.75, 1)) # 输出: 2.8
注意事项 2:浮点数精度问题
计算机使用二进制表示浮点数,有些十进制小数在二进制中是无限循环的,这会导致微小的精度误差。round() 函数可能会放大这种误差。
示例:

# 理论上 2.675 应该四舍五入到 2.68 # 但由于浮点数精度问题,它可能被存储为一个比 2.675 略小的数 # 在银行家舍入法下,它会舍入到 2.67 print(round(2.675, 2)) # 输出可能是 2.67 (在某些环境下可能是 2.68)
如果你对精度要求极高(例如金融计算),应该使用 decimal 模块。
高级技巧与替代方案
需要“传统”的四舍五入(逢5进1)
如果你不希望使用银行家舍入法,而是希望 .5 总是向上舍入,可以结合 math.floor() 和 math.ceil() 来实现。
示例:
import math
def traditional_round(number):
"""实现传统的四舍五入(逢5进1)"""
if number >= 0:
return math.floor(number + 0.5)
else:
return math.ceil(number - 0.5)
print(traditional_round(2.5)) # 输出: 3
print(traditional_round(2.4)) # 输出: 2
print(traditional_round(-2.5)) # 输出: -3
需要高精度计算(金融、货币)
对于需要精确到小数点后任意位数的场景,特别是处理金钱时,应该使用 Python 的 decimal 模块,它可以避免浮点数精度问题,并允许你自定义舍入模式。
示例:
from decimal import Decimal, ROUND_HALF_UP
# 使用 Decimal 进行精确计算
# 将字符串转换为 Decimal 以避免浮点数精度问题
number = Decimal('2.675')
# 指定使用 ROUND_HALF_UP 模式(传统的四舍五入)
rounded_number = number.quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)
print(rounded_number) # 输出: 2.68 (结果准确且可预测)
| 函数 | 用法 | 特点 | 适用场景 |
|---|---|---|---|
round() |
round(number, ndigits) |
银行家舍入法(round half to even),有浮点数精度风险。 | 通用科学计算、统计,不涉及金钱的日常编程。 |
| 自定义函数 | math.floor(x + 0.5) |
传统四舍五入(逢5进1),仍有浮点数精度风险。 | 需要特定舍入规则的通用场景。 |
decimal 模块 |
Decimal.quantize(...) |
高精度,可自定义舍入模式(如 ROUND_HALF_UP)。 |
金融、货币、会计等对精度要求极高的领域。 |
希望这个详细的解释能帮助您完全理解 Python 的 round() 函数!
