Python float 函数
上次修改时间:2025 年 4 月 11 日
这份全面指南探讨了 Python 的 float 函数,该函数可以将数字和字符串转换为浮点数值。我们将涵盖转换规则、字符串解析、特殊值和实际示例。
基本定义
float 函数从数字或字符串创建一个浮点数。 它实现了 Python 的浮点类型,该类型遵循 IEEE 754 双精度(64 位)数字标准。
主要特征:转换整数、带小数点的字符串、科学计数法。对于某些输入,返回诸如 inf 和 nan 之类的特殊值。 默认参数返回 0.0。
基本数值转换
这是一个简单的用法,展示了 float 如何将不同的数字类型和字符串表示形式转换为浮点数。
# Convert integers
print(float(42)) # 42.0
print(float(-10)) # -10.0
# Convert numeric strings
print(float("3.14")) # 3.14
print(float("-1.5")) # -1.5
# Scientific notation
print(float("2.5e2")) # 250.0
此示例显示 float 转换整数和字符串。 整数输入获得一个小数点。 字符串解析处理符号和小数点。
字符串支持科学计数法 (e/E)。 指数表示乘以 10 的幂(e2 表示 ×10²)。
特殊浮点值
Python 的 float 支持特殊值,例如无穷大和 NaN(非数字)。 此示例演示了它们的创建和检查。
# Infinity
pos_inf = float("inf")
neg_inf = float("-inf")
print(pos_inf, neg_inf) # inf -inf
# NaN (Not a Number)
nan = float("nan")
print(nan) # nan
# Checking these values
import math
print(math.isinf(pos_inf)) # True
print(math.isnan(nan)) # True
可以使用字符串“inf”或“-inf”创建无穷大值。 NaN 表示未定义的数值结果,例如 0/0。 这些是 IEEE 754 标准值。
math 模块提供了检查这些特殊值的函数,因为与 NaN 的直接相等比较是不可靠的。
字符串解析和区域设置注意事项
float 具有特定的字符串解析规则。 此示例显示了有效和无效的格式,包括与区域设置相关的小数点。
# Valid formats
print(float("3.14")) # 3.14
print(float(" 3.14 ")) # 3.14 (whitespace ignored)
print(float("3.14e-2")) # 0.0314
# Invalid formats
try:
float("3.14.15") # Multiple decimal points
except ValueError as e:
print(f"Error: {e}")
try:
float("3,14") # Comma as decimal (locale-dependent)
except ValueError as e:
print(f"Error: {e}")
# Locale-aware conversion
import locale
locale.setlocale(locale.LC_NUMERIC, 'de_DE')
print(float("3,14")) # Still fails - float() doesn't use locale
无论系统区域设置如何,float 只接受句点作为小数点。 对于特定于区域设置的解析,需要额外的处理。
数字周围的空格将被忽略。 对于格式错误的字符串或不支持的格式,该函数会引发 ValueError。
错误处理和默认值
此示例演示了在转换不确定输入时正确的错误处理,并显示了 float 的默认行为。
# Default value
print(float()) # 0.0
# Conversion attempts with error handling
def safe_float(value, default=0.0):
try:
return float(value)
except (ValueError, TypeError):
return default
print(safe_float("3.14")) # 3.14
print(safe_float("abc")) # 0.0
print(safe_float(None)) # 0.0
print(safe_float("", 99.9)) # 99.9 (custom default)
safe_float 函数演示了不会引发异常的鲁棒转换。 它为不可转换的输入返回一个默认值。
不带参数,float() 返回 0.0。 这对于初始化变量或提供默认数值非常有用。
精度和表示问题
浮点数具有固有的精度限制。 此示例演示了常见的表示问题以及如何处理它们。
# Representation error
num = float("0.1") + float("0.2")
print(num) # 0.30000000000000004
print(num == 0.3) # False
# Exact decimal arithmetic
from decimal import Decimal
num = Decimal("0.1") + Decimal("0.2")
print(float(num)) # 0.3
# Large numbers lose precision
big = float("12345678901234567890")
print(big) # 1.2345678901234567e+19
# Small numbers become zero
tiny = float("1e-324")
print(tiny) # 0.0
由于二进制表示,浮点运算可能会产生意想不到的结果。 decimal 模块提供精确的十进制算术。
非常大或非常小的数字可能会失去精度或下溢到零。 这些是 64 位浮点表示的局限性。
最佳实践
- 用于转换: 在需要浮点类型时转换字符串/数字
- 处理错误: 捕获字符串转换尝试的 ValueError
- 考虑替代方案: 使用 decimal 进行财务计算
- 注意精度: 注意表示限制
- 记录假设: 记下浮点精度何时足够
资料来源
作者
列出所有 Python 教程。