13.1 什么是浮点数? #
float 表示带小数的实数。除法 / 的结果始终是浮点数,即使能整除:
pi = 3.14
price = 19.99
ratio = 7 / 3 # 2.3333333333333335
print(float("3.14")) # 从字符串解析
print(type(pi)) # <class 'float'>科学计数法:1.5e6 表示 $1.5 \times 10^6$。
13.2 精度问题(重要) #
计算机用二进制存浮点数,部分十进制小数无法精确表示:
print(0.1 + 0.2) # 0.30000000000000004
print(0.1 + 0.2 == 0.3) # False因此:
- 不要用
==直接比较浮点数 - 需要判断「是否接近」时用
math.isclose()
import math
print(math.isclose(0.1 + 0.2, 0.3)) # True13.3 显示与四舍五入 #
展示给用户时用 round() 或 f-string 控制小数位,不要直接展示一长串尾数:
price = 19.9876
print(round(price, 2)) # 20.0(注意:round(2.5) 为 2,银行家舍入)
print(f"¥{price:.2f}") # ¥19.99(展示金额常用)需要向上/向下取整时用 math.ceil()、math.floor()。
13.4 金额与精确计算:Decimal #
金额、账单、库存单价等业务场景不要用 float 做加减乘除,应使用 decimal.Decimal:
from decimal import Decimal
a = Decimal("0.1")
b = Decimal("0.2")
print(a + b) # 0.3(精确)
# 用字符串初始化,不要用 Decimal(0.1)
total = Decimal("19.99") * Decimal("3")
print(total) # 59.97(精确)数据库、API 返回的金额字段,在 Python 中处理时也优先用 Decimal 或分为单位的整数(分、厘)。
13.5 项目开发要点 #
- 统计、比率、坐标:
float够用;比较时用math.isclose() - 金额:用
Decimal,或整数存「分」再除以 100 展示 - 展示:
f"{x:.2f}"控制小数位;入库、计算仍用Decimal /与//:/得 float;只要整数结果用//- 解析输入:
float(user_input)可能抛ValueError,需校验 - 金额字符串转
Decimal("19.99")