最简单的方法:str() 函数
这是最直接、最通用的方法,它适用于大多数不需要精确控制输出格式的场景。

my_float = 3.1415926 # 直接转换 str_float = str(my_float) print(str_float) print(type(str_float))
输出:
1415926
<class 'str'>
优点:
- 简单易用。
- 能处理
NaN(Not a Number) 和Infinity等特殊浮点值。
缺点:
- 无法控制小数位数或科学计数法等格式。
精确控制格式:f-string (格式化字符串字面量)
Python 3.6+ 推荐使用的方法,它非常强大、易读且高效,在字符串前加上 f 或 F,然后在字符串内部用 包含变量和格式说明符。

控制小数位数
使用 .nf 格式,n 是你想要保留的小数位数。
pi = 3.1415926
price = 49.99
# 保留2位小数
print(f"Pi is approximately {pi:.2f}")
print(f"The price is ${price:.2f}")
输出:
Pi is approximately 3.14
The price is $49.99
注意: .2f 会进行四舍五入,如果原始数字小数位不足,末尾会补零。
科学计数法
使用 .ne 格式,n 是小数点后有效数字的位数。

big_number = 123456.789
small_number = 0.00012345
print(f"Big number: {big_number:.2e}")
print(f"Small number: {small_number:.3e}")
输出:
Big number: 1.23e+05
Small number: 1.235e-04
更灵活的格式控制
f-string 的格式化能力非常强大,
g: 自动选择f(固定点) 或e(科学计数法) 中更简洁的一种。- 将数值乘以100后,以百分比形式显示。
number = 0.00012345
# 自动选择更简洁的格式
print(f"Using 'g': {number:.4g}") # 会选择科学计数法
# 百分比格式
print(f"Using '%': {0.25:.1%}") # 保留1位小数的百分比
输出:
Using 'g': 0.0001235
Using '%': 25.0%
传统格式化方法:format() 函数
这是 f-string 出现之前的主要格式化方法,功能与 f-string 类似,但语法略有不同。
pi = 3.1415926
# 使用 :.2f 格式说明符
formatted_str = "Pi is {:.2f}".format(pi)
print(formatted_str)
# 也可以传入多个变量
print("Value 1: {:.1f}, Value 2: {:.3f}".format(10.555, 3.14159))
输出:
Pi is 3.14
Value 1: 10.6, Value 2: 3.142
format() 方法非常灵活,支持位置参数和关键字参数。
老旧的 printf 风格: 运算符
这是从 C 语言继承来的格式化方法,在 Python 3 中仍然可用,但不推荐在新代码中使用,因为可读性较差。
pi = 3.1415926 # %f 是浮点数格式,%.2f 指定2位小数 formatted_str = "Pi is %.2f" % pi print(formatted_str)
输出:
Pi is 3.14
处理浮点数精度问题(非常重要!)
这是一个关键点:计算机浮点数在内存中存储时可能不是精确的,这会导致转换时出现意外的结果。
# 一个典型的精度问题 a = 0.1 + 0.2 print(a) # 输出可能是 0.30000000000000004 # 直接转换,会把精度问题也带上 print(str(a))
输出:
30000000000000004
0.30000000000000004
如何解决?
当需要精确的十进制表示时(例如金融计算),应该使用 decimal 模块,或者,当你只需要显示时,可以通过格式化来“隐藏”多余的精度。
# 方法一:使用格式化,只显示你关心的位数
a = 0.1 + 0.2
print(f"Formatted to 2 decimal places: {a:.2f}") # 输出 0.30
# 方法二:对于需要精确计算的场景,使用 decimal 模块
from decimal import Decimal
# 直接从字符串创建 Decimal,避免浮点数精度问题
d1 = Decimal('0.1')
d2 = Decimal('0.2')
exact_sum = d1 + d2
print(f"Exact sum using Decimal: {exact_sum}") # 输出 0.3
print(f"Converted to string: {str(exact_sum)}") # 输出 '0.3'
总结与选择建议
| 方法 | 示例 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
str() |
str(3.14) |
最简单,能处理 NaN |
无法控制格式 | 快速调试,不需要特定格式的转换。 |
f-string |
f"{pi:.2f}" |
推荐,强大、易读、高效 | 需要 Python 3.6+ | 绝大多数情况下的首选,尤其是需要格式化时。 |
format() |
"Value: {:.2f}".format(pi) |
功能强大,兼容性好 | 语法比 f-string 稍显冗长 |
需要兼容旧版 Python (3.5及以下) 的项目。 |
| 运算符 | "Value: %.2f" % pi |
兼容性极好 | 可读性差,不推荐新代码使用 | 维护非常古老的代码。 |
核心建议:
- 如果只是简单转换,不需要格式: 使用
str()。 - 如果需要控制小数位数、科学计数法等格式: 优先使用
f-string,这是现代 Python 的最佳实践。 - 如果涉及金融或高精度计算: 使用
decimal模块来处理数字,然后再用str()或f-string进行转换和显示。
