如何在 Python 中对数字进行舍入(round() 函数和小数)

了解如何在 Python 中对浮点数进行舍入。了解银行家的舍入、自定义小数精度以及用于显示的浮点数格式。

在编辑器中尝试此解决方案

概述

由于二进制系统存储小数的方式(例如,“0.1 + 0.2”计算为“0.30000000000000004”),计算机中的浮点运算有时会导致意外的精度问题。当向用户呈现数字或准备指标时,对数字进行四舍五入是常见的要求。 Python 提供了多种方法来实现这一点。

主要工具是内置的“round(number, ndigits)”函数。它需要一个数字和一个可选的精度计数。如果省略“ndigits”,则四舍五入到最接近的整数。如果提供了“ndigits”,则四舍五入到小数位数。

Python 的“round()”函数的一个关键属性是它使用“银行家舍入”(四舍五入到偶数)。当一个数字恰好位于两个整数的中间时(例如“2.5”或“3.5”),Python 会四舍五入到最接近的“偶数”数字。这意味着“round(2.5)”是“2”,“round(3.5)”是“4”。虽然在数学上公平地处理大型数据集以防止向上偏差,但对于精确的财务计算,您应该使用“小数”模块的量化工具。

代码和执行输出

此脚本演示使用内置舍入函数、银行家舍入示例和小数模块对浮点数进行舍入。

round_numbers.py
在编辑器中尝试
from decimal import Decimal, ROUND_HALF_UP

val = 3.14159

# 1. Round to nearest integer
print("Nearest Integer:", round(val))

# 2. Round to 2 decimal places
print("Two decimals:", round(val, 2))

# 3. Banker's Rounding demonstration (rounds to nearest even)
print("round(2.5):", round(2.5)) # Nearest even is 2
print("round(3.5):", round(3.5)) # Nearest even is 4

# 4. Math rounding up (Traditional rounding) using decimal module
amount = Decimal("2.5")
rounded_up = amount.quantize(Decimal("1"), rounding=ROUND_HALF_UP)
print("Decimal ROUND_HALF_UP (2.5):", rounded_up)
端子输出
Nearest Integer: 3
Two decimals: 3.14
round(2.5): 2
round(3.5): 4
Decimal ROUND_HALF_UP (2.5): 3

逐步实施

  • 调用内置的 round(number) 函数将浮点数四舍五入到最接近的整数。
  • 传递第二个参数(例如,round(num, 2))来指定要保留的小数位数。
  • 使用带有 ROUND_HALF_UP 的小数模块进行严格的财务舍入计算。

常见问题解答

为什么 Python 中 round(2.5) 返回 2 而不是 3?

Python 使用 Banker 舍入,将半数舍入到最接近的偶数。这可以减少统计偏差(将一半数字四舍五入总是会导致大型数据集出现轻微向上漂移)。

如何将数字始终向上或始终向下舍入?

导入 math 模块并使用 math.ceil(x) 向上舍入到下一个整数,或使用 math.floor(x) 向下舍入到上一个整数。

相关主题

推荐的 Python 资源

通过相关的交互式教程、备忘单和代码比较来扩展您的知识。