Python核心技术开发指南(012)——浮点数
版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl
在Python中,浮点数(float)是用于表示带有小数部分的数值的数据类型,适用于需要精确到小数位的场景,如科学计算、度量衡表示等。
浮点数的表示形式
Python中的浮点数可通过两种形式表示:
- 十进制小数形式:由整数部分、小数点(
.
)和小数部分组成。例如:3.14
、-0.001
、5.
(省略小数部分,等价于5.0
)、.7
(省略整数部分,等价于0.7
)。 - 科学计数法:用于表示极大或极小的浮点数,以
e
或E
连接基数与指数,格式为aeb
(表示a × 10^b
)。例如:2.5e3
(等价于2500.0
)、6.2e-2
(等价于0.062
)、-1.0E-5
(等价于-0.00001
)。
浮点数的类型标识为<class 'float'>
,可通过type()
函数验证:
print(type(3.14)) # 输出<class 'float'>
print(type(2.5e3)) # 输出<class 'float'>
浮点数的特性
-
有限精度:浮点数在计算机中以二进制形式存储,部分十进制小数(如
0.1
)无法被精确表示,可能存在精度误差。例如:print(0.1 + 0.2) # 输出0.30000000000000004(而非预期的0.3)
这是由于
0.1
和0.2
的二进制表示为无限循环小数,存储时会被截断,导致运算结果出现微小偏差。 -
取值范围:浮点数的取值范围受限于内存,通常可表示约
±1.7 × 10^308
的数值(超过此范围会表示为inf
或-inf
,即无穷大)。例如:print(1.0e400) # 输出inf(超过最大可表示值)
-
不可变性:与整数类似,浮点数对象一旦创建,其值不可修改。对浮点数的运算会生成新的浮点数对象。例如:
x = 2.5 y = x + 1.0 # 生成新对象3.5,x仍引用原对象2.5
-
特殊浮点值:
inf
(正无穷大)和-inf
(负无穷大):表示超出浮点数取值范围的数值。nan
(Not a Number,非数值):表示无效的数值运算结果(如0.0 / 0.0
)。
这些特殊值可通过math
模块访问或判断:
import math print(math.isinf(1.0e400)) # 输出True(判断是否为无穷大) print(math.isnan(0.0 / 0.0)) # 输出True(判断是否为非数值)
浮点数支持的操作
浮点数支持与整数类似的运算操作,主要包括:
-
算术运算:
+
(加)、-
(减)、*
(乘)、/
(除)、//
(整除)、%
(取余)、**
(幂运算)。需注意,整数与浮点数混合运算的结果为浮点数:print(3 + 2.5) # 输出5.5(整数与浮点数相加,结果为浮点数) print(7.0 // 3) # 输出2.0(整除结果仍为浮点数) print(2.5 ** 2) # 输出6.25(幂运算)
-
比较运算:
==
(等于)、!=
(不等于)、>
(大于)等,返回布尔值。由于精度误差,直接比较浮点数是否相等可能不准确,建议通过判断两者差值是否小于某一阈值(如1e-9
)实现近似比较:a = 0.1 + 0.2 b = 0.3 print(a == b) # 输出False(直接比较不准确) print(abs(a - b) < 1e-9) # 输出True(近似比较)
-
类型转换:通过
float()
函数可将整数、字符串等转换为浮点数。例如:print(float(5)) # 输出5.0(整数转换为浮点数) print(float("3.14")) # 输出3.14(字符串转换为浮点数)
-
数学函数:
math
模块提供了丰富的浮点数运算函数,如math.sqrt()
(开平方)、math.sin()
(正弦)、math.round()
(四舍五入)等。例如:import math print(math.sqrt(25.0)) # 输出5.0(开平方运算) print(round(3.1415, 2)) # 输出3.14(保留2位小数)
总结
Python的浮点数类型用于表示带小数部分的数值,支持科学计数法,但受限于二进制存储机制存在精度误差。浮点数运算规则与整数类似,但需注意混合运算的类型转换及精度比较问题。