说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的 float() 返回从数字或字符串生成的浮点数。如果参数是个字符串,则应包含一个十进制数字,前面可选带上符号,也可选前后带有空白符。
float([x]) 返回从数字或字符串 x 生成的浮点数。
class float([x])
如果参数是个字符串,则应包含一个十进制数字,前面可选带上符号,也可选前后带有空白符。符号可以是'+'
或 '-';'+' 符号对值没有影响。参数也可以是一个代表 NaN(非数字)或正负无穷大的字符串。更确切地说,在去除前导和尾部的空白符后,输入参数必须符合以下语法:
sign ::= "+" | "-"
infinity ::= "Infinity" | "inf"
nan ::= "nan"
numeric_value ::= floatnumber | infinity | nan
numeric_string ::= [sign] numeric_value
这里的 floatnumber 是指 Python 的浮点数格式,在 浮点数字面值 中有介绍。大小写没有关系,所以“inf”、“Inf”、“INFINITY”、“iNfINity”都可接受为正无穷的拼写形式。
另一方面,如果实参是整数或浮点数,则返回具有相同值(在 Python 浮点精度范围内)的浮点数。如果实参在 Python 浮点精度范围外,则会触发 OverflowError。
对于一个普通 Python 对象 x,float(x) 会委托给 x.__float__()
。 如果 __float__()
未定义则将回退至 __index__()
。
如果没有实参,则返回 0.0 。
浮点数字面值词法定义如下:
floatnumber ::= pointfloat | exponentfloat
pointfloat ::= [digitpart] fraction | digitpart "."
exponentfloat ::= (digitpart | pointfloat) exponent
digitpart ::= digit (["_"] digit)*
fraction ::= "." digitpart
exponent ::= ("e" | "E") ["+" | "-"] digitpart
注意,解析时,整数和指数部分总以 10 为基数。例如,077e010 是合法的,表示的数值与 77e10 相同。浮点数字面值的支持范围取决于具体实现。整数字面值支持用下划线分组数字。
浮点数字面值示例如下:
3.14 10. .001 1e100 3.14e-10 0e0 3.14_15_93
在 3.6 版更改: 现已支持在字面值中,用下划线分组数字。
一些示例:
>>> float('+1.23')
1.23
>>> float(' -12345\n')
-12345.0
>>> float('1e-003')
0.001
>>> float('+1E6')
1000000.0
>>> float('-Infinity') # 无穷小
# for NaN
float("nan")
float("NaN")
# 以上均返回缺失值
# nan
# for inf/infinity
float("inf")
float("InF")
float("InFiNiTy")
float("infinity")
# 以上均返回无穷大
# -inf
近期版本中关于浮点数的更新情况:
__float__()
未定义则回退至 __index__()
。float 类型实现了 numbers.Real
抽象基类(abstract base class),float 还具有以下附加方法。
float.as_integer_ratio() 返回一对整数,其比率正好等于原浮点数并且分母为正数。 无穷大会引发 OverflowError 而 NaN 则会引发 ValueError。
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 可以带有前导和尾随的空格。
请注意 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'
更新时间:Nov. 9, 2021, 11:50 p.m. 标签:python 数字 浮点数