为什么print('NaN')显示的结果不同于print(float('NaN'))

时间:2018-07-01 03:49:26

标签: python

print('NaN') 
'NaN'

但是

 print(float('NaN'))
 'nan'

为什么这样工作?“ NaN”和“ nan”有什么区别

4 个答案:

答案 0 :(得分:3)

第一个实例'NaN'是一个字符串。没有数字意义。

>>> type('NaN')
<class 'str'>

第二个实例是IEEE 754 Not A Number value,它是一个浮点数。

>>> type(float('NaN'))
<class 'float'>

float('NaN')的表示形式始终为nan,无论用于创建它的字母大小写如何。

# Those all work
float('NaN')
float('nan')
float('nAn')

请注意,nan值也可以通过math模块访问,就像inf一样,它是来自IEEE 754标准的另一个值。

from math import nan, inf

答案 1 :(得分:2)

这是因为Python的NaN(不是数字)表示为浮点数(来自IEEE 754 floating-point standard)。

因此,当您输入'NaN'时,它将保留为str

>>> 'NaN'
'NaN'
>>> type('NaN')
<class 'str'>

但是当您尝试将str的{​​{1}}表示转换为float时,它将响应该float的相应float表示:

str

从技术上讲,由于>>> float('123.45') 123.45 >>> type(float('123.45')) <class 'float'> 'NaN'的可识别的str表示形式,因此它可以无错误地进行转换:

float

答案 2 :(得分:1)

@OlivierMelançon是正确的'Nan'返回字符串float('NaN')返回浮点数

因此,您可以按如下所示进行检查:

>>> import math
>>> x=float('NaN')
>>> math.isnan(x)
True
>>> x='NaN'
>>> math.isnan(x)
Traceback (most recent call last):
  File "<pyshell#60>", line 1, in <module>
    math.isnan(x)
TypeError: must be real number, not str
>>> 

答案 3 :(得分:0)

print('NaN')仅按原样打印参数字符串。对于print函数,它与任何其他字符串相同。

>>> type('NaN')
<class 'str'>

float('NaN')实际上是一个Not A Number,它表示为nan

>>> type(float('NaN'))
<class 'float'>