python数值类型

一、数值类型

整数

1、在python3的版本中,整数不区分整形和长整型,并且python中的整数有无穷精度,例如

>>> 3 ** 100
515377520732011331036461129765621272702107522001

即使是计算3**100003**1000000,python也不会报错,但计算的时间会更长
2、当整数与浮点数同时参与表达式的运算时,所得到的结果类型一定是浮点数,整数与整数之间做/运算时所得结果也一定是浮点数
3、整数除了10进制之外还有二进制、八进制、十六进制等其他进制表示

  • 二进制:以0b0B开头,其后值都为0~1的数值表示是二进制整数
  • 八进制:以0o0O开头,其后值都为0~7的数值表示是八进制整数
  • 十六进制:以0x0X开头,其后值都为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数值类型 - 骏马金龙

上一篇:论文解读-TransForensics: Image Forgery Localization with Dense Self-Attention


下一篇:ecstore中怎样使用ajax提交数据