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 教程。