在python中格式化一个nan浮点数

时间:2012-08-07 15:26:37

标签: python string-formatting

我正在尝试在'nan'浮动上使用string.format。

以下是python documentation中“g”选项的说明。

  

一般格式。这会将数字打印为定点数,除非数字太大,在这种情况下,它会切换为'e'指数表示法。无穷大和NaN值分别被格式化为inf,-inf和nan。

以下是我在解释器(Python 2.6)中尝试的内容:

>>> print "{0:g}".format(float('nan'))
-1.#IND

据我了解文档,输出应为“nan”。

这是一个错误还是我做错了?

1 个答案:

答案 0 :(得分:7)

在Python 2.6和Python 3.0中修复了

repr(float);见http://bugs.python.org/issue1635;然而str.format直到2.7分支才得到修复;请参阅http://hg.python.org/cpython/rev/c5e0d9beebf9http://bugs.python.org/issue1580

我建议您查看"{0!r}"是否适合您; 应该调用未损坏的repr代码。

如果您需要使用"{0:g}"格式规范,则可以尝试继承float并覆盖__format__

class FixFloat(float):
    def __format__(self, format_spec):
        return 'nan' if math.isnan(self) else float.__format__(self, format_spec)

"{0:g}".format(FixFloat(1.2345e9))
'1.2345e+09'
"{0:g}".format(FixFloat(float('nan')))
'nan'