我正在尝试在'nan'浮动上使用string.format。
以下是python documentation中“g”选项的说明。
一般格式。这会将数字打印为定点数,除非数字太大,在这种情况下,它会切换为'e'指数表示法。无穷大和NaN值分别被格式化为inf,-inf和nan。
以下是我在解释器(Python 2.6)中尝试的内容:
>>> print "{0:g}".format(float('nan'))
-1.#IND
据我了解文档,输出应为“nan”。
这是一个错误还是我做错了?
答案 0 :(得分:7)
repr(float)
;见http://bugs.python.org/issue1635;然而str.format
直到2.7分支才得到修复;请参阅http://hg.python.org/cpython/rev/c5e0d9beebf9和http://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'