ZetCode

Python float 函数

上次修改时间:2025 年 4 月 11 日

这份全面指南探讨了 Python 的 float 函数,该函数可以将数字和字符串转换为浮点数值。我们将涵盖转换规则、字符串解析、特殊值和实际示例。

基本定义

float 函数从数字或字符串创建一个浮点数。 它实现了 Python 的浮点类型,该类型遵循 IEEE 754 双精度(64 位)数字标准。

主要特征:转换整数、带小数点的字符串、科学计数法。对于某些输入,返回诸如 infnan 之类的特殊值。 默认参数返回 0.0。

基本数值转换

这是一个简单的用法,展示了 float 如何将不同的数字类型和字符串表示形式转换为浮点数。

basic_float.py
# 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(非数字)。 此示例演示了它们的创建和检查。

special_values.py
# 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 具有特定的字符串解析规则。 此示例显示了有效和无效的格式,包括与区域设置相关的小数点。

string_parsing.py
# 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 的默认行为。

error_handling.py
# 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。 这对于初始化变量或提供默认数值非常有用。

精度和表示问题

浮点数具有固有的精度限制。 此示例演示了常见的表示问题以及如何处理它们。

precision.py
# 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 位浮点表示的局限性。

最佳实践

资料来源

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程