Python 中如何限制浮点数的小数位数?

Python 保留 N 位小数:round(x, 2) 返回数值;f"{x:.2f}" 返回格式化字符串;decimal 模块精确十进制运算。本文对比各方法及四舍五入陷阱。

最佳实践
Python 中如何限制浮点数的小数位数?封面

两种思路:要数值round(x, 2);要显示用 f-string f"{x:.2f}"。注意 round 是银行家舍入,金额场景建议用 decimal 模块。

round():保留数值类型

x = 3.14159265
round(x, 2)   # 3.14(仍是 float)

格式化输出:f-string / format / %

x = 3.14159265

f"{x:.2f}"        # "3.14"
"{:.2f}".format(x)  # "3.14"
"%.2f" % x        # "3.14"

返回字符串,适合展示。

round 的坑:银行家舍入 + 浮点表示

round(2.5)     # 2(不是 3!向偶数取整)
round(0.575, 2)  # 0.57(0.575 实际存的是 0.57499...)

精确十进制:decimal 模块

金额、财务计算不要用 float:

from decimal import Decimal, ROUND_HALF_UP

x = Decimal("0.575")
print(x.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP))  # 0.58

Decimal("0.575") 用字符串构造避免浮点误差,ROUND_HALF_UP 是我们熟悉的"四舍五入"。

常见问题(FAQ)

Q:round 后是 3.0 而不是 3.00?
A:数值不保留"位数"概念,3.0 和 3.00 是同一个数。需要显示两位小数用格式化。

Q:如何只截断不四舍五入?
A:int(x * 100) / 100;或 Decimal 配合 ROUND_DOWN

Q:科学计数法输出怎么避免?
A:f-string 的 :.Nf 固定小数格式不会用科学计数法;:.Ne 才是科学计数法。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台