数字类型包括整数、浮点数、复数、小数和分数。
整数类型整数
整数类型就是不带小数点的数。例如123、-12,Python3不再区别整数和长整数,只要计算机内存空间足够,整数理论上可以无穷大。一般的整型常量都是十进制的。Python还允许将整型常量表示为二进制、八进制和十六进制。
二进制:以0b或0B开头,后面是二进制数字(0或1)。例如0b101、0B11八进制:以0o或0O开头,后面是八进制数字(0-7)。例如0o15、0o123十六进制:以0x或0x开头,后面是十六进制数字(0-9、A-F或a-f),例如0x12AB不同进制只是整数的不同书写形式,Python程序运行时会将整数处理为十进制数。例如:
2**100 # 2的100次方 12676506002282294014967032053769**100 '''9的100次方,数很大,结果为:18299438469904400126561398887587476933878132203577962682923345265339495974574961739092490901302'''浮点数类型浮点数类型的名称为float,实际上用于表示小数,如12.5、2.5、3.0、1.23e+10、1.23E-10等都是合法的浮点数常量。与整数不同,浮点数存在取值范围,超过取值范围会产生溢出错误(OverflowError)。浮点数的取值范围为-10^{308}~~~10^{308}。例如:
# 小数点后的0可以省略 2.0print(2.) # 0小数点前的0可以省略 0.5print(.5) print(10**308) # 1e+308print(10**309) # 超出浮点数范围'''Traceback ( most recent call last ) :File " < stdin > " , line 1 , in < module >OverflowError : ( 34 , ' Result too large ' )'''print(-10**308) # -1e+308print(-10.0**309) # 超出浮点数范围'''Traceback ( most recent call last ) :File "<stdin>", line 1, in cnoduleOverflowerror : ( 34 , " Result too large ' )'''复数类型复数类型的名称为complex。复数常量表示为实部+虚部形式,虚部以j或J结尾。例如,2+3j、2-3J、2j。可用complex()函数来创建复数,其基本格式如下:
complex(2, 3) # complex(实部,虚部) (2 + 3j)小数类型诶?上面的浮点数不是说是浮点数就是小数吗?怎么又来一个小数类型?是这样的,因为计算机的硬件特点,计算机不能对浮点数执行精确运算,例如:
# 计算结果并不是1.0 是 0.999999999999999print(0.3+0.3+0.3+0.1) # 计算结果并不是0 是 -2.7755575615628914e-17print(0.3-0.1-0.1-0.1)因此Python自2.4版本开始引入了一种新的数字类型:小数对象。小数可以看作是固定精度的浮点数,它有固定的位数和小数点,可以满足规定精度的计算。创建使用小数对象
from decimal import Decimal # 从模块导入函数d = Decimal('0.3') + Decimal('0.3') + Decimal('0.3') + Decimal('0.1')print(d) # 1.0d = Decimal('0.3') - Decimal('0.1') - Decimal('0.1') - Decimal('0.1')print(d) # 0.0print(type(Decimal ('1.0')) # <class 'decimal.Decimal'>小数的全局精度全局精度指作用于当前程序的小数的有效位数,默认全局精度为28位有效数字。可使用decimal 模块中的上下文对象来设置小数的全局精度。用法如下:
# 导入模块from decimal import * # 用默认精度计算小数 Decisal ('0. 33333333333333333333') print(Decimal ('1') / Decimal ('3'))# 获得上下文对象context=getcontext ( ) # 设置全局小数精度为5位有效数字context.prec = 5 print(Decimal('1')/Decimal('3')) # Decimal ('0.33333')print(Decimal('10') / Decimal('3')) # Decimal ('3.3333')小数的临时精度临时精度在with模块中使用。用法如下:
with localcontext() as local : local.prec=3 Decimal('1') / Decimal('3') # 0.333 Decimal('10') / Decimal('3') # 3.33分数类型分数对象明确地拥有一个分子和分母,且分子和分母保持最简,使用分数可以避免浮点数的不精确性。分数使用fractions模块中的Fraction()函数创建,其基本语法格式如下。
from fractions import Fractionx=Fraction(2,8)print(x) # 1/4 print(x+2) # 4/9print(x-2) # -7/4print(x*2) # 1/2print(x/2) # 1/8可以使用Fraction.from_float()函数将浮点数转换为分数,例如:
Fraction.from_float(1.25) # 5/4布尔类型Python中不尔类型只有两个值,True和False,表示真和假,常常作为判断条件。布尔类型变量可以当做整型参与运算,将其看作整型时,True转换为1,False转换为0。将布尔型常量转换为字符串时,True转换为"True",False转换为"False"。



