2009-10-07 3 views
10

플로트를 가지고 있습니다 : 1.2333333float를 소수점으로 구분하는 두 개의 십진수로 쉼표로 바꾸려면 어떻게해야합니까?

소수점 구분 기호로 쉼표로 두 개의 십진수로 어떻게 변경합니까? 예 : 1,23?

+0

속는 : http://stackoverflow.com/questions/316238/python-float-to-decimal-conversion –

+0

Ólafur Waage @ - 로케일 물건 http://stackoverflow.com/questions/에없는 316238/python-float-to-decimal-conversion –

답변

8

, 두 소수를 얻을

'%.2f' % 1.2333333 

쉼표를 얻으려면 사용하려면 replace() 사용

('%.2f' % 1.2333333).replace('.', ',') 

이 두 번째 옵션은 쉼표를 사용하고 locale.format()을 사용하는 일부 장소에 change the locale하는 것 :

locale.setlocale(locale.LC_ALL, 'FR') 
locale.format('%.2f', 1.2333333) 
+0

이것은 절대 잘못된 것입니다. 보통의 "% f"'문자열 포맷터는 로케일에 의존하지 않습니다. – u0b34a0f6ae

+0

때로는 다음과 같습니다. https://bugs.webkit.org/show_bug.cgi?id=18994 모호성을 피하기 위해 내 대답이 향상되었습니다. –

+0

@FlorianPilz : 내 Python 버전이 아니며 [설명서에 없음] (https://docs.python.org/2/library/stdtypes.html#str.replace) –

1

l ocale, 당신은 물론 자신을 포맷 할 수 있습니다. 이것은 출발점이 될 수 있습니다이 항상 분수 부분을 절단 것

def formatFloat(value, decimals = 2, sep = ","): 
    return "%s%s%0*u" % (int(value), sep, decimals, (10 ** decimals) * (value - int(value))) 

주 (즉, 1.04999은 1,04로 인쇄됩니다).

7

locale module은 로케일 형식으로 숫자를 읽고 쓸 수 있도록 도와줍니다.

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, "") 
'sv_SE.UTF-8' 
>>> locale.format("%f", 2.2) 
'2,200000' 
>>> locale.format("%g", 2.2) 
'2,2' 
>>> locale.atof("3,1415926") 
3.1415926000000001 
관련 문제