数据类型转换与数字
本教程共 70 篇 · 第 8 篇 · 更新于 2026-07-22 · 约 3 分钟阅读
8. 数据类型转换与数字
本节目标:掌握 int、float、complex 的用法,理解类型转换和浮点数精度问题。
整数 int
Python 的整数没有大小限制,可以处理任意大的数:
>>> 10 ** 100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
为了方便阅读大数字,可以用下划线分隔:
>>> population = 1_411_778_724
>>> population
1411778724
整数支持多种进制:
>>> 0b1010 # 二进制,前缀 0b
10
>>> 0o12 # 八进制,前缀 0o
10
>>> 0xA # 十六进制,前缀 0x
10
浮点数 float
浮点数就是小数,用科学计数法表示时把 ×10 换成 e:
>>> 1.23e9 # 1.23 × 10^9
1230000000.0
>>> 1.2e-5 # 1.2 × 10^-5
0.000012
Warning浮点数运算有精度问题,这是计算机表示小数的固有限制,不是 Python 独有的 bug。
>>> 0.1 + 0.2
0.30000000000000004
需要精确计算时(比如涉及钱),用 decimal 模块:
from decimal import Decimal
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b) # 0.3,精确值
Note传给 Decimal 的是字符串
'0.1',不是浮点数0.1。如果传浮点数,精度损失已经发生,救不回来了。
复数 complex
复数由实部和虚部组成,虚部用 j 表示:
>>> c = 3 + 4j
>>> c.real # 实部
3.0
>>> c.imag # 虚部
4.0
>>> abs(c) # 模
5.0
复数在工程、信号处理领域常用,日常开发很少用到。
类型转换函数
Python 提供了内置函数在数字类型之间转换:
>>> int(3.14) # 浮点转整数,截断小数部分
3
>>> int("42") # 字符串转整数
42
>>> float(3) # 整数转浮点
3.0
>>> complex(3, 4) # 构造复数
(3+4j)
Warning
int()转换不是四舍五入,是直接截断。int(3.9)结果是3。要四舍五入用round():>>> round(3.9) 4 >>> round(2.5) # 偶数优先 2 >>> round(3.5) 4
一些转换会失败:
>>> int("hello")
ValueError: invalid literal for int() with base 10: 'hello'
用 try/except 可以安全处理(异常处理后面章节会详细讲):
try:
num = int(input("请输入数字:"))
except ValueError:
print("输入的不是有效数字")
数字运算
>>> 5 + 4 # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7 # 乘法
21
>>> 2 / 4 # 真除法,结果总是浮点数
0.5
>>> 2 // 4 # 地板除,取整数部分
0
>>> 17 % 3 # 取余
2
>>> 2 ** 5 # 幂运算
32
>>> divmod(17, 3) # 同时返回商和余数
(5, 2)
Tip
/和//的区别很重要。/永远返回浮点数,哪怕整除:9 / 3得3.0。//返回整数(或向下取整的浮点数)。
浮点数详解:为什么 0.1 + 0.2 != 0.3
计算机用二进制存储浮点数,而 0.1 转换成二进制是无限循环小数,只能近似存储。这就好比用十进制无法精确表示 1/3(0.3333…)。
如果需要判断两个浮点数是否「相等」,不要直接用 ==,而是看差值是否小于一个很小的数:
import math
a = 0.1 + 0.2
b = 0.3
# 错误做法
print(a == b) # False
# 正确做法
print(math.isclose(a, b)) # True
Note
math.isclose()是 Python 3.5 加入的,默认相对容差rel_tol=1e-09,大部分场景够用。
来源:参考了 runoob「Python3 数字」「Python3 数据类型转换」、liaoxuefeng「数据类型和变量」、pythondoc「浮点算术:问题和限制」、w3cschool「Python3 数字」等,改写后所得。