一、数值类型
整数
1、在python3的版本中,整数不区分整形和长整型,并且python中的整数有无穷精度,例如
>>> 3 ** 100
515377520732011331036461129765621272702107522001
即使是计算3**10000
,3**1000000
,python也不会报错,但计算的时间会更长
2、当整数与浮点数同时参与表达式的运算时,所得到的结果类型一定是浮点数,整数与整数之间做/
运算时所得结果也一定是浮点数
3、整数除了10进制之外还有二进制、八进制、十六进制等其他进制表示
- 二进制:以
0b
或0B
开头,其后值都为0~1
的数值表示是二进制整数 - 八进制:以
0o
或0O
开头,其后值都为0~7
的数值表示是八进制整数 - 十六进制:以
0x
或0X
开头,其后值都为0~9
/a~f
/A~F
的值或表示是十六进制整数
浮点数
由于硬件的原因,使得计算机对于浮点数的处理总是不精确的。在python中不建议直接将两个浮点数进行大小比较,或者做精确的计算,因为得到的结果往往出人意料。
>>> 3,4-2.2
(3, 1.7999999999999998)
如果确实需要将两个浮点数进行比较时,可以用一个足够小的值和两个浮点数之间差的绝对值进行不等比较
>>> (3.2-2.8) == 0.4
False
>>> abs((3.2-2.8)-0.4) < 0.0002
True
二、数值类型运算注意点
真除法
/
在python中,整数与整数之间做/
运算时所得结果也一定是浮点数
>>> 3 / 1
3.0
>>> -4 / 2
-2.0
Floor除法
//
在python中实现的是floor地板除法,它会去掉做除法运算得到结果的小数位,得到小于运算结果的最大整数。但如果参与运算的有小数,此时会返回浮点数
>>> 5 // 2
2
>>> 5.2 // 2
2.0
对于正数的运算结果,floor除法是直接去除小数位的。而对于负数结果,则是取比运算结果更小的负整数
>>> -5.2 // 2
-3.0
>>>
四舍五入
round(x, N)
是四舍五入,其中x
为四舍五入的对象,N
为精确到的小数点后面几位数,int类型
>>> round(2.456,1)
2.5
>>> round(2.456,2)
2.46
>>> round(2.0034,2)
2.0
>>> round(2.034,2)
2.03
精确小数
Decimal()
是decimal模块下的一个函数,可以精确的指定小数位数
>>> 3.14 - 3.13
0.010000000000000231 # 得到的结果是一个无限接近0.01的值
>>> import decimal # 导入decimal包
>>> decimal.Decimal("3.14") - decimal.Decimal("3.13")
Decimal('0.01')
值得注意的是Decimal的参数都是字符串,如果不使用字符串则仍会以原来的浮点数参与运算
>>> import decimal
>>> decimal.Decimal(3.14) - decimal.Decimal(3.13)
Decimal('0.01000000000000023092638912203')
计算结果的精度以参与计算数值的最长精度为准
>>> import decimal
>>> decimal.Decimal("3.14")-decimal.Decimal("3.130000")
Decimal('0.010000')
三、数值类型转换
整形转浮点数类型
>>> float(3)
3.0
浮点数类型转整形,即丢掉小数点后面数值
>>> int(2.6)
2
四、不同进制间转换
十进制转其他进制
- bin():十进制转二进制
bin(24) -->'0b11000'
- oct():十进制转八进制
oct(24) -->'0o30'
- hex():十进制转十六进制
hex(24) -->'0x18'
其他进制转十进制
使用int()函数:int(x, base)
其中x
指代被转化对象,base
为该对象对应的进制
>>> int('0x18', 16)
24
>>> int('0o30', 8)
24
>>> int('0b11000', 2)
24
非十进制之间转换
先将待转化对象转为十进制,再由十进制转为目标进制
>>> bin(int('0x18', 16))
'0b11000' # 由16进制转化为2进制
参考文章:
链接: Python数值类型 - 骏马金龙