第五篇:数字类型——整数、浮点数与布尔值详解
前言
程序的核心功能之一是处理数据,而数值是最基础的数据类型之一。Python 提供了三种数值类型:整数(int)、浮点数(float)和布尔值(bool)。虽然 Python 会自动推断变量的类型,但理解它们的特性、运算规则和常见陷阱对于写出正确的程序至关重要。本文将深入讲解整数的各种表示方式、浮点数的精度问题,以及布尔逻辑运算的应用。
整数(int)
在 Python 中,整数是没有小数部分的数字。与其他语言不同,Python 的 int 类型没有大小限制——你可以创建任意大的整数,只要内存足够。
基本用法
# 正整数
age = 25
print(age) # 25
# 负整数
temperature = -10
print(temperature) # -10
# 零
zero = 0
print(zero) # 0
# 超大整数(无上限)
big_number = 10 ** 100 # 10 的 100 次方
print(big_number) # 1e+100
print(len(str(big_number))) # 101 位数
Python 的整数可以精确计算任意大小的数字,不会像其他语言那样溢出。
整数的不同进制表示
Python 支持多种进制的整数写法,方便在不同场景下使用。
| 进制 | 前缀 | 示例 | 等价值 |
|---|---|---|---|
| 十进制(默认) | 无 | 42 |
42 |
| 二进制 | 0b 或 0B |
0b1010 |
10 |
| 八进制 | 0o 或 0O |
0o52 |
42 |
| 十六进制 | 0x 或 0X |
0x2a |
42 |
# 二进制表示
binary_value = 0b1010 # 2^3 + 2^1 = 10
print(binary_value) # 10
# 八进制表示
octal_value = 0o52 # 5*8 + 2 = 42
print(octal_value) # 42
# 十六进制表示
hex_value = 0x2A # 2*16 + 10 = 42
print(hex_value) # 42
print(hex(42)) # '0x2a'
print(oct(42)) # '0o52'
print(bin(42)) # '0b1010'
这些进制转换在处理文件权限、颜色编码(CSS 中的 #FF5733)和网络协议时经常用到。
千分位分隔符
Python 3.6+ 允许在数字中使用下划线 _ 作为千分位分隔符,提高大数字的可读性:
# 不使用分隔符
population = 1234567890
# 使用下划线分隔(更易读)
population = 1_234_567_890
# IP 地址可以直接写成整数
ip_address = 192_168_001_001
print(ip_address) # 3232235521
# 金额
price = 9_999_999.99
print(f"总价:¥{price:,}") # 总价:¥9,999,999.99
整数常用方法
num = 42
# 判断奇偶
if num % 2 == 0:
print("偶数")
else:
print("奇数")
# divmod:同时获取商和余数
quotient, remainder = divmod(42, 5)
print(f"42 ÷ 5 = {quotient} ... 余 {remainder}")
浮点数(float)
浮点数是带有小数部分的数字,用于需要精度的场景。Python 使用双精度(64 位)IEEE 754 格式存储浮点数。
基本用法
# 普通小数
pi = 3.14159
print(pi) # 3.14159
# 科学计数法
distance_to_sun = 1.496e11 # 1.496 × 10^11 米
electron_mass = 9.109e-31 # 9.109 × 10^-31 kg
# float() 函数可以进行类型转换
height = float("1.75")
print(height) # 1.75
⚠️ 浮点数精度问题
这是每个 Python 开发者都必须了解的坑:浮点数无法精确表示所有小数。
# 经典案例:0.1 + 0.2 != 0.3
result = 0.1 + 0.2
print(result) # 0.30000000000000004
print(result == 0.3) # False
# 解决方案一:容差比较
eps = 1e-10
if abs((0.1 + 0.2) - 0.3) < eps:
print("近似相等 ✅")
# 方案二:使用 Decimal 高精度类(财务计算推荐)
from decimal import Decimal
a = Decimal('0.1')
b = Decimal('0.2')
result = a + b
print(result) # 0.3 — 精确结果
# 方案三:math.isclose()
import math
print(math.isclose(0.1 + 0.2, 0.3)) # True
关键规则:
- 涉及金钱计算时,始终使用
Decimal,不要用float - 比较浮点数时,永远不要用
== - 展示给用户的浮点数用
round()控制小数位数
浮点数的格式化
speed_of_light = 299792458
print(f"{speed_of_light:.3e}") # 2.998e+08
print(f"{speed_of_light:,}") # 299,792,458
print(f"{3.14:>10.2f}") # ' 3.14' — 右对齐填充
布尔值(bool)
布尔值是 Python 中最简单的数据类型,只有两个值:True 和 False(注意首字母必须大写)。
基本概念
is_adult = True
is_student = False
print(type(is_adult)) # <class 'bool'>
# 布尔值是 int 的子类
print(isinstance(True, int)) # True
print(True + 1) # 2
print(False + 1) # 1
生成布尔值的条件表达式
大多数布尔值来自比较运算符:
x = 10
print(x > 5) # True — 大于
print(x >= 10) # True — 大于等于
print(x == 10) # True — 等于
print(x != 10) # False — 不等于
以下表达式返回 False(称为空值/伪值):
None(专门表示"无"False本身- 数值
0,0.0,0j - 空序列/集合:
"",[],(),{},set()
# 测试真值
print(bool("")) # False
print(bool([])) # False
print(bool(0)) # False
print(bool(None)) # False
print(bool("Hello")) # True
print(bool([1, 2])) # True
逻辑运算符
and — 与(两个都为 True 才返回 True)
age = 25
has_id = True
can_enter = age >= 18 and has_id
print(can_enter) # True
# 短路求值:遇到第一个 False 就停止
print(False and expensive_operation()) # 右边不会被执行
or — 或(至少一个为 True 就返回 True)
is_weekend = True
is_holiday = False
can_rest = is_weekend or is_holiday
print(can_rest) # True
not — 非(取反)
active = False
not_active = not active
print(not_active) # True
name = ""
if not name:
print("请输入用户名!")
真值表速查
| a | b | a and b | a or b | not a |
|---|---|---|---|---|
| True | True | True | True | False |
| True | False | False | True | False |
| False | True | False | True | True |
| False | False | False | False | True |
逻辑运算符的高级应用
# 技巧一:and/or 实现默认值选择
username = ""
display_name = username or "匿名用户"
# 技巧二:闰年判断
year = 2024
is_leap = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
print(f"{year} 是闰年:{is_leap}") # True
算术运算
Python 支持丰富的算术运算符:
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 3 + 5 |
8 |
- |
减法 | 10 - 3 |
7 |
* |
乘法 | 4 * 5 |
20 |
/ |
除法(浮点) | 10 / 3 |
3.333... |
// |
整除(向下取整) | 10 // 3 |
3 |
% |
取模 | 10 % 3 |
1 |
** |
幂运算 | 2 ** 10 |
1024 |
# 除法的区别
print(10 / 3) # 3.3333333333333335
print(10 // 3) # 3
print(-10 // 3) # -4 — 向下取整
# 取模的妙用
seconds = 125
hours = seconds // 3600
minutes = (seconds % 3600) // 60
remaining = seconds % 60
print(f"时间:{hours}h {minutes}m {remaining}s")
# 输出:时间:0h 2m 5s
总结
本文讲解了 Python 三种数值类型的核心知识:
- 整数(int) — 无大小限制,支持二进制/八进制/十六进制表示,可使用下划线提升可读性
- 浮点数(float) — 有精度陷阱,金钱计算用
Decimal,比较时用math.isclose() - 布尔值(bool) — 只有
True/False两值,配合and/or/not进行逻辑运算 - 算术运算符 —
+、-、*、/、//、%、**各有用途
掌握这些数值类型后,你已经具备了处理大部分数学运算的能力。下一篇文章将讲解字符串的各种操作。
本文是 Python 教程系列的第五篇。
