目录

一、f-string 基础

二、保留小数点后指定位数

2.1 基本用法

2.2 自动舍入与精度

三、结合宽度与对齐

3.1 指定最小宽度

3.2 对齐方式

3.3 填充字符

四、千位分隔符

五、显示正负号

六、百分比格式

七、科学计数法

八、保留小数点但截断不四舍五入?

九、在表达式中使用

十、与其他格式化方式的对比

十一、实战案例

11.1 商品价格表

11.2 科学数据展示

11.3 百分比进度

十二、注意事项

十三、总结

在数据展示、报表生成、科学计算等场景中,我们经常需要控制浮点数的显示精度。Python 3.6 引入的 f-string(格式化字符串字面量)提供了一种简洁、高效的方式。本文将详细介绍如何使用 f-string 保留小数点位数,以及更多格式化技巧。

一、f-string 基础

f-string 是在字符串前加上 f 或 F 前缀,并在花括号 {} 中嵌入变量或表达式,同时支持格式说明符。

python
name = "Alice"
score = 95.5
print(f"{name} 的分数是 {score}")   # Alice 的分数是 95.5

如果需要控制小数位数,可以在表达式后添加格式说明符 : 和格式规则。

二、保留小数点后指定位数

2.1 基本用法

:.nf

最常用的格式是 :.nf,其中 n表示保留的小数位数,f表示固定小数点表示法。

python
pi = 3.1415926535
print(f"{pi:.2f}")   # 3.14
print(f"{pi:.4f}")   # 3.1416

如果实际小数位数不足,会用 0 补齐。
如果超出,会进行四舍五入。

python
value = 5
print(f"{value:.2f}")   # 5.00

2.2 自动舍入与精度

:.nf 遵循银行家舍入法,但日常使用可视为四舍五入。

python
print(f"{2.675:.2f}")   # 2.67(注意:由于浮点表示,实际可能为2.67)
print(f"{2.685:.2f}")   # 2.69

如果需要更精确的控制,可使用 decimal 模块。

三、结合宽度与对齐

有时我们不仅需要控制小数位数,还需要指定总宽度和对齐方式,以便对齐输出。

3.1 指定最小宽度

格式为 :宽度.精度f。

python
numbers = [12.3, 456.789, 7.0]
for n in numbers:
    print(f"{n:10.2f}")   # 总宽度10,保留2位小数

#输出:
     12.30
    456.79
      7.00

3.2 对齐方式

< 左对齐(默认数值右对齐,字符串左对齐)
> 右对齐
^ 居中对齐

python
print(f"{3.14159:<10.2f}")   # 3.14      (左对齐)
print(f"{3.14159:>10.2f}")   #       3.14(右对齐)
print(f"{3.14159:^10.2f}")   #    3.14   (居中)

3.3 填充字符

可以指定填充字符(默认为空格),放在对齐符之前。

python
print(f"{3.14:0>10.2f}")   # 0000003.14
print(f"{3.14:*^10.2f}")   # ***3.14***

四、千位分隔符

对于大数字,添加千位分隔符能提高可读性。使用 , 或 _

python
amount = 1234567.89
print(f"{amount:,.2f}")   # 1,234,567.89
print(f"{amount:_.2f}")   # 1_234_567.89

可以结合宽度、对齐等使用。

五、显示正负号

默认负数带 -,正数不带符号。
使用 + 强制显示正号。
使用空格在正数前留一个空格,便于对齐。

python
positive = 3.14
negative = -2.71
print(f"{positive:+.2f}")   # +3.14
print(f"{negative:+.2f}")   # -2.71
print(f"{positive: .2f}")   #  3.14(正数前留空格)

六、百分比格式

将小数转换为百分比显示,使用 % 格式符。它会自动将数值乘以100并添加 % 符号,并可指定小数位数。

python
ratio = 0.857
print(f"{ratio:.1%}")   # 85.7%
print(f"{ratio:.2%}")   # 85.70%

七、科学计数法

使用 e 或 E 显示科学计数法。

python
num = 0.00012345
print(f"{num:.2e}")   # 1.23e-04
print(f"{num:.2E}")   # 1.23E-04

同样可以指定宽度、对齐等。

八、保留小数点但截断不四舍五入?

f-string 的 :.nf 是四舍五入的。如果需要直接截断(不进行四舍五入),可以借助 math.floor 或字符串操作,但更推荐使用decimal模块。

python
import math
value = 3.14159
truncated = math.floor(value * 100) / 100   # 3.14
print(f"{truncated:.2f}")   # 3.14

九、在表达式中使用

f-string 支持在花括号内执行表达式,因此可以直接在格式化时进行计算。

python
total = 100
count = 3
print(f"平均值: {total / count:.2f}")   # 平均值: 33.33

也可以调用函数。

python
def format_currency(amount):
    return f"${amount:,.2f}"

price = 1234.5
print(f"价格: {format_currency(price)}")   # 价格: $1,234.50

十、与其他格式化方式的对比


%格式化:%.2f  % pi , 旧式,可读性差,不推荐 
str.format(): "{:.2f}".format(pi) ,功能强大,但稍显冗长
f-string :f"{pi:.2f}",最简洁,性能最好(Python 3.6+) 

f-string 在可读性和性能上都优于前两者,是 Python 3.6 之后的首选。

十一、实战案例

11.1 商品价格表

python
products = [
    ("苹果", 5.99),
    ("香蕉", 3.50),
    ("橙子", 4.25)
]
print("商品    单价")
for name, price in products:
    print(f"{name:<6}¥{price:>7.2f}")

# 输出:
商品    单价
苹果    ¥   5.99
香蕉    ¥   3.50
橙子    ¥   4.25

11.2 科学数据展示

python
values = [0.001234, 12345.6789, -0.0000567]
for v in values:
    print(f"{v:>12.4e}  原始值: {v}")

11.3 百分比进度

python
completed = 123
total = 500
percent = completed / total
print(f"进度: {percent:.1%} ({completed}/{total})")
# 进度: 24.6% (123/500)

十二、注意事项

1. 性能:f-string 在编译时被转换为高效的 FORMAT_VALUE操作码,比format() 和%更快。
2. 兼容性:仅支持 Python 3.6+,若需兼容旧版本,使用 str.format()。
3. 浮点精度:浮点数本身存在精度问题,格式化只是显示层面的处理。需要精确计算时,应使用 decimal.。
4. 表达式复杂度:虽然支持表达式,但保持简洁更利于阅读。

十三、总结


保留2位小数: f"{num:.2f}"
宽度10,右对齐,保留2位: f"{num:>10.2f}"
千位分隔符:f"{num:,.2f}"
百分比: f"{ratio:.1%}"
科学计数法: f"{num:.2e}"
显示正号: f"{num:+.2f}"

f-string 是 Python 中最优雅、最高效的字符串格式化方式。掌握它,能让你的代码更简洁,输出更美观。希望本文能帮助你在实际开发中灵活运用 f-string 处理小数格式化。

如果觉得有收获,欢迎点赞、收藏、关注哦。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐