![]() |
2.2 Python的数值数据类型 |
Python的数值数据类型有整数(int)、浮点数(float)与布尔值(bool)。下面逐一说明这些数值类型的用法。
整数数据类型用来存储不含小数点的数据,与数学上的意义相同,如-1、-2、-100、0、1、2、100等。Python 2.x中的整数有int(整数)和long(长整数)两种类型,但Python 3.x之后就只有int整数类型,Python的数值处理能力相当强大,基本上没有位数的限制,只要硬件CPU可以支持,再大的整数都可以处理。
有时为了可读性的需要,我们可以使用不同的数字系统来表示整数值,例如存储数据的内存地址就经常是以十六进制来表示的。整数包含正整数或负整数,除了用十进制(decimal)来表示外,也可以用二进制(binary)、十六进制(hexadecimal)、八进制(octal)来表示,只要分别在数字之前加上0b、0x、0o指定进制系统即可。表2-1所示是整数的一些例子。
表2-1
浮点数(floating point)数据类型指的是带有小数点的数字,也就是数学上所指的实数(real number)。除了一般小数点的常规表示方法外,也可以使用科学记数法以指数形式表示,例如6e-2,其中6称为有效数,-2称为指数。表2-2所示都是合法的浮点数表示方式。
表2-2
计算机中的数字是采用IEEE 754标准规范来存储的,IEEE 754标准的浮点数并不能精确地表示小数,举例来说:
num = 0.1 + 0.2
得到的num并不等于0.3,而是0.30000000000000004。这不是Python独有的问题,所有的程序设计语言对浮点数运算都有精确度的问题,因此进行浮点数运算时必须特别小心。下面提供两个小数运算的方法供读者参考。
·使用decimal模块进行小数运算
decimal模块是Python标准模块库,使用它之前需要先用import指令导入这个模块,而后才能使用。正确导入这个模块之后,我们就可以使用decimal.Decimal类来存储精确的数字,如果参数为非整数,就必须以字符串形式传入参数,例如:
import decimal num = decimal.Decimal("0.1") + decimal.Decimal("0.2")
这样运算后得到的结果就会是0.3。
·使用round()函数强制小数点的指定位数
round(x[,n])是内建函数,会返回参数x最接近的数值,n用来指定返回的小数点位数,例如:
num = 0.1 + 0.2 print( round(num, 1) )
上面的程序语句是将变量num取到小数点后1位,因此会得到0.3的结果。
布尔数据类型(bool)是一种表示逻辑的数据类型,是int的子类,只有真值(True)与假值(False)。布尔数据类型通常用于程序流程控制中的逻辑判断。我们也可以采用数值“1”或“0”来代表真值或假值。表2-3所示为一些数据类型表示为假值的情况。
表2-3
在Python语言中,必须是相同的数据类型才能直接进行运算,例如字符串与整数不能直接相加,必须将字符串转换为整数,如果参加运算的都是数值类型,那么Python会自动进行类型转换,而不需要指定强制转换类型,例如:
num = 5 + 0.3 #结果num=5.3 (浮点数)
Python会自动将整数转换为浮点数再进行运算。另外,布尔值也可以当成数值来运算,True代表1,False代表0,例如:
num = 5 + True #结果num=6 (整数)
如果想把字符串转换为布尔值,可以通过bool函数来进行转换。在下面的范例程序中使用print()函数来显示布尔值。
【范例程序:bool.py】转换布尔类型
01 print( bool(0) ) 02 print( bool("") ) 03 print( bool(" ") ) 04 print( bool(1) ) 05 print( bool("ABC") )
范例程序的执行结果如图2-4所示。
图2-4
程序代码解析:
·第02行:传入一个空字符串,所以返回False。
·第03行:传入含有一个空格的字符串,所以返回True。
使用布尔值False与True时要特别注意第一个字母必须大写。