请稍候,加载中....

数字类型内置方法

数字类型除了在运算符部分介绍的运算以外还有额外的方法

整数类型方法

方法名 描述
int.bit_length()
# 返回以二进制表示一个整数所需要的位数,不包括符号位和前面的零
n = -37 
bin(n) 
# '-0b100101' 

n.bit_length()
# 输出 6

更准确地说,如果n非零,则 n.bit_length() 是使得 2**(k-1) <= abs(x) < 2**k 的唯一正整数 k。

int.to_bytes(length, byteorder, *, signed=False)
# 返回表示一个整数的字节数组。
(1024).to_bytes(2, byteorder='big') 
# b'\x04\x00' 

(1024).to_bytes(10, byteorder='big') 
# b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00' 

(-1024).to_bytes(10, byteorder='big', signed=True)
# b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00' 

x = 1000
x.to_bytes((x.bit_length() + 7) // 8, byteorder='little') 
b'\xe8\x03'

整数会使用 length 个字节来表示。 如果整数所需的字节数大于给定的字节数来表示则会引发OverflowError:int too big to convert。如果给定的length大于整数的字节数长,剩余的使用0补全,补全顺序由byteorder确定

  • byteorder 参数确定用于表示整数的字节顺序。
  • 如果 byteorder 为 "big",则最高位字节放在字节数组的开头。
  • 如果 byteorder 为 "little",则最高位字节放在字节数组的末尾。
  • 要请求主机系统上的原生字节顺序,请使用 sys.byteorder 作为字节顺序值。 s
  • signed 参数确定是否使用二的补码来表示整数。 如果 signed 为 False 并且给出的是负整数,则会引发 OverflowError。 signed 的默认值为 False。

类方法:
int.from_bytes(bytes, byteorder, *, signed=False)

# 返回由给定字节数组所表示的整数,这是一个类方法。
int.from_bytes(b'\x00\x10', byteorder='big')
# 16

int.from_bytes(b'\x00\x10', byteorder='little')
# 4096 

int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)
# -1024 

int.from_bytes(b'\xfc\x00', byteorder='big', signed=False)
# 64512 

int.from_bytes([255, 0, 0], byteorder='big')
# 16711680
  • bytes 参数必须为一个 bytes-like object 或是生成字节的可迭代对象。
  • byteorder 参数确定用于表示整数的字节顺序。
  • 如果 byteorder 为 "big",则最高位字节放在字节数组的开头。
  • 如果 byteorder 为 "little",则最高位字节放在字节数组的末尾。
  • 要请求主机系统上的原生字节顺序,请使用 sys.byteorder 作为字节顺序值。
  • signed 参数指明是否使用补码来表示整数。
   

浮点类型方法

方法名 描述
float.as_integer_ratio() 返回一对整数,其比率正好等于原浮点数并且分母为正数。 无穷大会引发 OverflowError 而 NaN 则会引发 ValueError
# 返回一对整数,其比率正好等于原浮点数并且分母为正数
print(0.53.as_integer_ratio())

 

float.is_integer()
# 如果 float 实例可用有限位整数表示则返回 True,否则返回 False:

(-2.0).is_integer()
# True 

(3.2).is_integer()
# False
两个方法均支持与十六进制数字符串之间的转换。 由于 Python 浮点数在内部存储为二进制数,因此浮点数与 十进制数 字符串之间的转换往往会导致微小的舍入错误。 而十六进制数字符串却允许精确地表示和描述浮点数。 这在进行调试和数值工作时非常有用。
float.hex() 以十六进制字符串的形式返回一个浮点数表示。 对于有限浮点数,这种表示法将总是包含前导的 0x 和尾随的 p 加指数。
类方法 float.fromhex(s) 返回以十六进制字符串 s 表示的浮点数的类方法。 字符串 s 可以带有前导和尾随的空格。

十六进制字符串采用的形式为:

# [sign] ['0x'] integer ['.' fraction] ['p' exponent]

可选的 sign 可以是 + 或 -

integer 和 fraction 是十六进制数码组成的字符串,

exponent 是带有可选前导符的十进制整数。 大小写没有影响,在 integer 或 fraction 中必须至少有一个十六进制数码。  特别地,float.hex() 的输出可以用作 C 或 Java 代码中的十六进制浮点数字面值,而由 C 的 %a 格式字符或 Java 的 Double.toHexString 所生成的十六进制数字符串由为 float.fromhex() 所接受。

exponent 是十进制数而非十六进制数,它给出要与系数相乘的 2 的幂次。 例如,十六进制数字符串 0x3.a7p10 表示浮点数 (3 + 10./16 + 7./16**2) * 2.0**10 即 3740.0:

 

 

 

 

 

 


Python学习手册-