返回博客

05. 数字类型:整数、浮点数与布尔值详解

05. 数字类型:整数、浮点数与布尔值详解

第五篇:数字类型——整数、浮点数与布尔值详解

前言

程序的核心功能之一是处理数据,而数值是最基础的数据类型之一。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 三种数值类型的核心知识:

  1. 整数(int) — 无大小限制,支持二进制/八进制/十六进制表示,可使用下划线提升可读性
  2. 浮点数(float) — 有精度陷阱,金钱计算用 Decimal,比较时用 math.isclose()
  3. 布尔值(bool) — 只有 True/False 两值,配合 and/or/not 进行逻辑运算
  4. 算术运算符 — +、-、*、/、//、%、** 各有用途

掌握这些数值类型后,你已经具备了处理大部分数学运算的能力。下一篇文章将讲解字符串的各种操作。


本文是 Python 教程系列的第五篇。