说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的浮点类型是内置的基础类型,float 类型实现了 numbers.Real
抽象基类(abstract base class)的一些方法。 此外,它还提供了其他几个比较实用的方法。
float.as_integer_ratio()
返回一对整数元组,其比率正好等于原整数并且分母为正数。 整数的比率总是用这个整数本身作为分子,1 作为分母。无穷大会引发 OverflowError 而 NaN 则会引发 ValueError。
示例如下:
# 以下是整型
(5).as_integer_ratio()
# (5, 1)
(0).as_integer_ratio()
# (0, 1)
# 以下是浮点型
(-0.5).as_integer_ratio()
# (-1, 2)
(0.1).as_integer_ratio()
# (3602879701896397, 36028797018963968)
3.1415926535897932.as_integer_ratio()
# (884279719003555, 281474976710656)
得到的元组 (a, b),a/b 的结果就是原对象的值,其中 b 一定是正整数,这个在浮点型中非常有用,3.8 版本对整型也进行了兼容支持,用于减少给定有理数的分数,用整型表示浮点表示的不精确性。比如,我们在传递数字的时间,为了防止浮点型丢失精度,可以转换为以上元组形式传递。
如果 float 实例可用有限位整数表示则 float.is_integer()
返回 True,否则返回 False:
(-2.0).is_integer()
# True
(3.2).is_integer()
# False
两个方法均支持与十六进制数字符串之间的转换。 由于 Python 浮点数在内部存储为二进制数,因此浮点数与 十进制数 字符串之间的转换往往会导致微小的舍入错误。 而十六进制数字符串却允许精确地表示和描述浮点数。 这在进行调试和数值工作时非常有用。
float.hex()
以十六进制字符串的形式返回一个浮点数表示。 对于有限浮点数,这种表示法将总是包含前导的 0x 和尾随的 p 加指数。
示例如下:
(3.14).hex()
# '0x1.91eb851eb851fp+1'
0.1.hex()
# '0x1.999999999999ap-4'
float.fromhex(s)
是一个类方法(classmethod),它返回以十六进制字符串 s 表示的浮点数的类方法。 字符串 s 可以带有前导和尾随的空格。
请注意 float.hex()
是实例方法,而 float.fromhex()
是类方法。
十六进制字符串采用的形式为:
'''
[sign] ['0x'] integer ['.' fraction] ['p' exponent]
'''
可选的 sign 可以是 +
或 -
,integer 和 fraction 是十六进制数码组成的字符串,exponent 是带有可选前导符的十进制整数。 大小写没有影响,在 integer 或 fraction 中必须至少有一个十六进制数码。 此语法类似于 C99 标准的 6.4.4.2 小节中所描述的语法,也是 Java 1.5 以上所使用的语法。 特别地,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:
float.fromhex('0x3.a7p10')
# 3740.0
对 3740.0 应用反向转换会得到另一个代表相同数值的十六进制数字符串:
float.hex(3740.0)
# '0x1.d380000000000p+11'
如果直接用字面量调用方法和属性会报语法错误,可以在点后增加一个或者多个空格,或括号将点隔开。
见 Python 整数类型的附加方法 中相关的介绍。
更新时间:2022-06-04 00:12:09 标签:python 浮点 方法