2012-08-07 2 views
5

'nan'float에 string.format을 사용하려고합니다.파이썬에서 나노 플로트 포맷하기

다음은 python documentation에서 'g'옵션의 설명이다.

일반 형식입니다. 숫자가 너무 큰 경우가 아니라면 고정 소수점 숫자로 인쇄합니다.이 경우 숫자가 'e'지수 표기법으로 전환됩니다. Infinity 및 NaN 값은 각각 inf, -inf 및 nan으로 형식화됩니다. 나는이 문서를 이해로

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

는, 출력이 "유모"이어야합니다 :

그리고 여기가 내가 인터프리터 (파이썬 2.6)을 시도하고 무엇을 얻을.

이 버그인가, 아니면 내가 잘못 뭐하는 거지?

+0

어떤 플랫폼과 사용중인 파이썬 버전? – ecatmur

+1

플랫폼의 Windows 7 및 Python v. 2.6.6 (32 비트) – Chris

답변

7

repr(float) 파이썬 2.6 파이썬 3.0에서 고정시켰다 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' 
+0

Python 2.6을 사용하고 있습니다. 당신의 대답을 조금 더 발전시켜 주시겠습니까? – Chris

+0

버그에 나열된 '버전'은 발견 된 버전 또는 해결 된 버전을보고합니까? 나는 전자를 의심한다. 그것은 나를 위해 2.7에서 작동합니다. –

+0

@Chris'str.format'은 별개의 문제였습니다. – ecatmur