Python float浮点数类型详解(附带实例)
浮点数(float)是 Python 中的一个基本数据类型,用来表示带有小数部分的数字,比如 3.14、-0.001 ,常用于科学计算、统计分析和日常数学运算。
在 Python 中,定义浮点数常直接用小数点或者科学计数法表示:
x = 3.14 # 普通小数 y = -0.5 # 负小数 z = 2.5e3 # 科学计数法,表示 2.5 × 10³ = 2500.0
Python 浮点数基于 IEEE 754 标准实现,通常占用 64 位(双精度),这意味着它有一定的精度和范围限制。
Python浮点数的常见操作
浮点数支持多种数学运算和函数操作,下面罗列了几种常见的浮点数操作。
1) 基本数学运算
浮点数可以进行加、减、乘、除等基本运算,结果通常也是浮点数。
基本算法 | 运算符号 | 举 例 |
---|---|---|
加法 | + | 1.5 + 2.3 = 3.8 |
减法 | - | 5.7 - 2.2 = 3.5 |
乘法 | * | 2.5 * 3.0 = 7.5 |
除法 | / | 5.0 / 2.0 = 2.5(始终返回浮点数) |
整除 | // | 5.7 // 2.0 = 2.0(返回浮点数形式的整数部分) |
取余 | % | 5.7 % 2.0 = 1.7000000000000002 |
幂运算 | ** | 2.0 ** 3.0 = 8.0 |
例如:
a = 5.7 b = 2.0 print(a + b) # 输出 7.7 print(a - b) # 输出 3.7 print(a * b) # 输出 11.4 print(a / b) # 输出 2.85 print(a // b) # 输出 2.0 print(a % b) # 输出 1.7000000000000002 print(a ** b) # 输出 32.49
2) Python浮点数内置数学函数
Python 的 math 模块提供了许多针对浮点数的函数,比如取整、绝对值、三角函数等。
使用 math 模块前需要导入模块,例如:
import math x = 3.7 print(math.floor(x)) # 输出 3(向下取整) print(math.ceil(x)) # 输出 4(向上取整) print(math.trunc(x)) # 输出 3(截断小数部分) print(abs(-x)) # 输出 3.7(绝对值) print(math.sqrt(16.0)) # 输出 4.0(平方根)
上述程序返回的结果通常是浮点数。
3) 类型转换
在 Python 中,可以用 float() 函数将其他类型转换为浮点数,例如整数或字符串。也可以用 int() 或 str() 等函数将浮点数转换为其他类型。
例如:
a = float(5) # 整数转浮点数 b = float("3.14") # 字符串转浮点数 c = int(3.99) # 浮点数转整数(截断小数) d = str(2.5) # 浮点数转字符串 print(a) # 输出 5.0 print(b) # 输出 3.14 print(c) # 输出 3 print(d) # 输出 "2.5"
注意:如果字符串无法转换为浮点数(比如 "abc"),会抛出 ValueError
异常。
Python浮点数的精度问题
浮点数在计算机中以二进制形式存储,这导致某些小数无法被精确表示。
例如,0.1 在二进制中是一个无限循环小数,因此会出现精度误差:
print(0.1 + 0.2) # 输出 0.30000000000000004
这是 IEEE 754 标准的常见现象,不是 Python 独有的问题。
处理精度问题,Python 程序中可以借助 round() 函数或者 decimal 模块解决:
1) round() 函数可以控制小数位数。例如:
print(round(0.1 + 0.2, 1)) # 输出 0.3
2) decimal 模块可以提供更高精度的十进制运算。例如:
from decimal import Decimal, getcontext getcontext().prec = 4 # 设置精度为 4 位 a = Decimal("0.1") b = Decimal("0.2") print(a + b) # 输出 0.3
由于精度问题,直接比较两个浮点数是否相等可能会出现意外结果。例如:
print(0.1 + 0.2 == 0.3) # 输出 False
解决方法是比较它们的差值是否足够小。例如:
a = 0.1 + 0.2 b = 0.3 print(abs(a - b) < 1e-10) # 输出 True(差值小于 10⁻¹⁰)
这种方法在实际编程中更可靠。
总结
在 Python 中使用 float 浮点数类型时,还有以下几点需要注意:-
除法结果:即使两个操作数都是整数,
/
运算也返回浮点数,例如 4 / 2 = 2.0; -
溢出:浮点数的范围很大(约 ±1.8 × 10³⁰⁸),但超过范围会变为
inf
(无穷大); -
格式化输出:可以用字符串格式化控制小数位数,例如
print(f"{3.14159:.2f}")
输出 "3.14"。