当前位置:首页>python>0.1+0.2≠0.3?Python数字运算的6个惊人真相,新手必看!

0.1+0.2≠0.3?Python数字运算的6个惊人真相,新手必看!

  • 2026-10-11 07:47:23
0.1+0.2≠0.3?Python数字运算的6个惊人真相,新手必看!

大家好,我是沉默小皮,让大家更容易的学习Python3,今天我们来看下:Python3 数字(Number):整数、浮点数、复数等

在Python的世界里,数字是最基础也最重要的数据类型之一。无论是简单的加减乘除,还是复杂的科学计算,都离不开它。

一、Python中的三种数字类型

Python 3支持三种不同的数值类型,它们的区别主要体现在表示范围和精度上:

类型
说明
示例
整型 (int)
正或负整数,不带小数点。Python3的整数没有大小限制,想多大就多大
100
, -786, 0o37(八进制), 0xA0F(十六进制)
浮点型 (float)
带小数点的数,也可以用科学计数法表示
0.0
, 15.20, -21.9, 32.3e+18
复数 (complex)
由实数部分和虚数部分构成,用a + bj或complex(a,b)表示
3.14j
, 45.j, 9.322e-36j

注意:布尔值 (True/False) 其实是整型的子类,True等价于1,False等价于0,但不要依赖这个特性做复杂运算。

1.1 整数的不同进制表示

Python中除了常见的十进制,还支持直接写二进制、八进制、十六进制的整数:

# 十六进制(以0x开头)hex_num = 0xA0F# 十进制为 2575print(hex_num)# 八进制(以0o开头,数字0和小写字母o)oct_num = 0o37# 十进制为 31print(oct_num)# 二进制(以0b开头)bin_num = 0b1010# 十进制为 10print(bin_num)

1.2 数字类型的创建与删除

创建一个数字对象非常简单,直接赋值即可。与一些编程语言不同,Python中的数字是不可变的——当你修改一个数字变量时,实际上是创建了一个新的数字对象,而不是在原来的对象上修改。

# 创建数字对象price = 99weight = 70.5complex_num = 3 + 4j# 使用del语句删除数字对象的引用del price      # 删除单个变量del weight, complex_num   # 同时删除多个

小知识:del语句删除的是“引用”而不是对象本身。如果同一个数字对象被多个变量引用,删除其中一个变量不影响其他变量。

二、数字类型转换

Python提供了几个内置函数,用于在不同数字类型之间转换:

函数
作用
示例
int(x)
将x转换为整数(截断小数部分)
int(3.14)
 → 3,int("100") → 100
float(x)
将x转换为浮点数
float(10)
 → 10.0,float("3.14") → 3.14
complex(x)
转换为复数,实部为x,虚部为0
complex(3)
 → 3+0j
complex(x, y)
转换为复数,实部为x,虚部为y
complex(3, 4)
 → 3+4j
a = 1.0b = int(a)      # b = 1(浮点转整数会截断小数)c = float(b)    # c = 1.0d = complex(b, 2)  # d = 1+2j

三、数字运算

Python可以像计算器一样进行数学运算,表达式的写法非常直观。

3.1 基本算术运算

# 加减乘除print(2 + 2)        # 4print(50 - 5 * 6)   # 20(注意运算符优先级)print((50 - 5*6) / 4)  # 5.0(除法结果总是浮点数)# 特别注意:/ 的结果永远是浮点数print(8 / 5)        # 1.6print(8 / 4)        # 2.0(不是2,是浮点数2.0)

3.2 整除与取余

如果想要整数结果,可以使用//(整除)和%(取余):

# 整除 //print(17 // 3)      # 5(向下取整)print(7.0 // 2)     # 3.0(注意:结果类型跟随操作数)print(7 // 2.0)     # 3.0# 取余 %print(17 % 3)       # 2(余数)# 验证:5 * 3 + 2 = 17

关键点://的结果类型取决于操作数——两个整数结果是整数,有一个浮点数结果就是浮点数。

3.3 幂运算与其他

# 幂运算 **print(5 ** 2)       # 25(5的平方)print(2 ** 7)       # 128(2的7次方)# 变量必须先赋值才能使用# print(n)  # 这会报错:NameError: name 'n' is not defined# 混合类型运算会自动转换(整数→浮点数)print(3 * 3.75 / 1.5)   # 7.5

3.4 特殊变量 _(下划线)

在交互式环境中,_会自动保存上一次表达式的结果,这是一个非常方便的小技巧:

>>> tax = 12.5 / 100>>> price = 100.50>>> price * tax12.5625>>> price + _          # _ 等于上一次计算结果 12.5625113.0625>>> round(_, 2)        # _ 现在是113.0625113.06

注意:_只在交互式环境中有效,在脚本中不要依赖这个变量。

四、常用的数学函数

Python的math模块提供了很多实用的数学函数,使用前需要先导入:import math

函数
说明
示例
abs(x)
绝对值(内置函数,无需import)
abs(-10)
 → 10
math.ceil(x)
向上取整
math.ceil(4.1)
 → 5
math.floor(x)
向下取整
math.floor(4.9)
 → 4
round(x, n)
四舍五入,n为保留小数位数(内置函数)
round(3.14159, 2)
 → 3.14
math.pow(x, y)
返回x的y次方(浮点数)
math.pow(2, 3)
 → 8.0
math.sqrt(x)
平方根
math.sqrt(16)
 → 4.0
math.exp(x)
e的x次幂
math.exp(1)
 → 2.71828...
math.log(x, base)
对数,base为底数(默认自然对数)
math.log(100, 10)
 → 2.0
math.modf(x)
返回小数部分和整数部分(均为浮点数)
math.modf(3.14)
 → (0.14000000000000012, 3.0)
import mathprint(math.ceil(4.1))   # 5print(math.floor(4.9))  # 4print(round(3.14159, 2))  # 3.14(注意:round不是math模块的)print(math.sqrt(25))    # 5.0

五、随机数函数

random模块提供了丰富的随机数功能,在游戏、抽奖、数据采样等场景非常有用。

函数
说明
示例
random.choice(seq)
从序列中随机选一个元素
random.choice([1,2,3])
random.randrange(start, stop, step)
按指定步长在范围内随机选
random.randrange(0, 100, 5)
random.random()
返回[0.0, 1.0)之间的随机浮点数
random.random()
 → 0.374...
random.uniform(a, b)
返回[a, b]之间的随机浮点数
random.uniform(1, 10)
random.shuffle(lst)
随机打乱列表的顺序
random.shuffle(cards)
random.seed(x)
设置随机种子(保证结果可复现)
random.seed(42)
import random# 随机整数print(random.randint(1, 10))      # 1到10之间的随机整数# 从列表中随机选一个colors = ["红", "绿", "蓝"]print(random.choice(colors))# 打乱列表顺序numbers = [1, 2, 3, 4, 5]random.shuffle(numbers)print(numbers)  # 每次运行结果都可能不同

六、三角函数与数学常量

科学计算中经常用到三角函数,math模块同样提供了支持:

函数
说明
math.sin(x)
正弦(x为弧度)
math.cos(x)
余弦
math.tan(x)
正切
math.asin(x)
反正弦
math.degrees(x)
弧度转角度
math.radians(x)
角度转弧度

常用常量:

  • math.pi:圆周率 π(≈3.14159)
  • math.e:自然常数 e(≈2.71828)
import math# 计算半径为5的圆的面积radius = 5area = math.pi * radius ** 2print(f"圆面积: {area}")# 角度转弧度再计算正弦angle_deg = 30angle_rad = math.radians(angle_deg)print(math.sin(angle_rad))  # 0.5

💡 几点真实经验与避坑建议

  1. 不要用浮点数直接比较相等由于浮点数精度问题,0.1 + 0.2 == 0.3 的结果是 False。应该用差值判断:abs(0.1+0.2-0.3) < 1e-9。

  2. 整除 // 对于负数的结果是向下取整,不是向零取整-9 // 2 的结果是 -5(因为 -4.5 向下取整到 -5),而不是 -4。这点和C/Java不同,需要特别注意。

  3. round() 的四舍五入可能和你预期的不完全一样Python的 round() 采用“银行家舍入法”——当小数部分正好是0.5时,会取到最近的偶数。例如 round(2.5) 结果是 2,round(3.5) 结果是 4。

  4. 整数没有大小限制,但浮点数有Python整数可以无限大(受内存限制),但浮点数超出范围会变成 inf(无穷大)或 -inf。

  5. 复数用得少,但要知道它的存在如果你在做科学计算、信号处理,复数非常有用。创建复数的两种方式:3+4j 或 complex(3,4)。

  6. 随机数种子很重要设置相同的种子可以保证每次运行生成的随机数序列相同,这对调试和复现实验结果非常有帮助。

最新文章

随机文章