문제

Python을 사용하여 188518982.18 ~ £ 188,518,982.18과 같은 숫자를 포맷하려고합니다.

어떻게 할 수 있습니까?

도움이 되었습니까?

해결책

참조 장소 기준 치수.

이것은 통화 (및 날짜) 형식을 수행합니다.

>>> import locale
>>> locale.setlocale( locale.LC_ALL, '' )
'English_United States.1252'
>>> locale.currency( 188518982.18 )
'$188518982.18'
>>> locale.currency( 188518982.18, grouping=True )
'$188,518,982.18'

다른 팁

2.7의 새로운

>>> '{:20,.2f}'.format(18446744073709551616.0)
'18,446,744,073,709,551,616.00'

http://docs.python.org/dev/whatsnew/2.7.html#pep-0378

왜 온라인 (또는이 스레드)에 대해 더 많이 언급되지 않은 이유는 확실하지 않지만 바벨 Edgewall Guys의 패키지 (및 Django 유틸리티)는 통화 형식 (및 기타 I18N 작업)에 대단합니다. 코어 파이썬 로케일 모듈처럼 전 세계적으로 모든 것을 할 필요가 없기 때문에 좋습니다.

OP가 준 예는 단순히 다음과 같습니다.

>>> import babel.numbers
>>> import decimal
>>> babel.numbers.format_currency( decimal.Decimal( "188518982.18" ), "GBP" )
£188,518,982.18

이것은 고대 게시물이지만 다음 솔루션을 구현했습니다.

  • 외부 모듈이 필요하지 않습니다
  • 새 기능을 만들 필요가 없습니다
  • 인라인으로 수행 할 수 있습니다
  • 여러 변수를 처리합니다
  • 마이너스 달러를 처리합니다

암호:

num1 = 4153.53
num2 = -23159.398598

print 'This: ${:0,.0f} and this: ${:0,.2f}'.format(num1, num2).replace('$-','-$')

산출:

This: $4,154 and this: -$23,159.40

그리고 원래 포스터의 경우 분명히 전환 $ ~을 위한 £

내 로케일 설정은 불완전한 것처럼 보였으 므로이 대답을 넘어서도 찾았습니다.

http://docs.python.org/library/decimal.html#recipes

OS 독립적

여기서 공유하고 싶었습니다.

OSX를 사용하고 있지만 아직 로케일 모듈 설정을 설정하지 않은 경우이 첫 번째 답변이 작동하지 않으면 다음 오류가 표시됩니다.

Traceback (most recent call last):File "<stdin>", line 1, in <module> File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 221, in currency
raise ValueError("Currency formatting is not possible using "ValueError: Currency formatting is not possible using the 'C' locale.

이를 해결하려면 다음을 사용해야합니다.

locale.setlocale(locale.LC_ALL, 'en_US')

오, 그것은 흥미로운 짐승입니다.

나는 그 권리를 얻는 데 상당한 시간을 보냈습니다. 로케일과 로케일마다 다른 세 가지 주요 문제가 있습니다 : - 통화 기호 및 방향 - 천명 분리기 - 소수점 지점

나는 Kiwi Python 프레임 워크의 일부인 이것에 대한 다소 광범위한 구현을 작성했습니다. 여기에서 LGPL : ED 출처를 확인하십시오.

http://svn.async.com.br/cgi-bin/viewvc.cgi/kiwi/trunk/kiwi/currency.py?view=markup

코드는 약간 Linux/Glibc에 특이 적이지만 Windows 또는 기타 유닉스에 채택하기가 어렵지 않아야합니다.

설치 한 후에는 다음을 수행 할 수 있습니다.

>>> from kiwi.datatypes import currency
>>> v = currency('10.5').format()

그러면 다음과 같이 줄 것입니다.

'$10.50'

또는

'10,50 kr'

현재 선택된 로케일에 따라

이 게시물이 다른 점에 비해 요점은 이전 버전의 파이썬과 함께 작동한다는 것입니다. Locale.currency는 Python 2.5에 도입되었습니다.

내가 당신이라면, 나는 바벨을 사용할 것입니다 : http://babel.pocoo.org/en/latest/index.html

from babel.numbers import format_decimal


format_decimal(188518982.18, locale='en_US')

#variable 'total :'이와 같은 형식 '9,348.237'.

print ('Total:',   '{:7,.3f}'.format(zum1))

여기서 '{: 7, .3f}'는이 경우 숫자를 형식화하기위한 공간 수는 백만 이하 십진제입니다. 그런 다음 '.format (zum1)를 추가합니다. ZUM1은 내 특정 프로그램에서 모든 숫자의 합에 대해 큰 숫자를 가진 THA 변수입니다. 변수는 사용하기로 결정한 것이 될 수 있습니다.

나는 같은 것을 보러 왔고 파이썬 돈 아직 사용하지는 않았지만 두 사람의 혼합이 좋을 것입니다.

기능 내부에서 계산하기위한 람다, 도움을 받아 @Nate의 대답

converter = lambda amount, currency: "%s%s%s" %(
    "-" if amount < 0 else "", 
    currency, 
    ('{:%d,.2f}'%(len(str(amount))+3)).format(abs(amount)).lstrip())

그리고,

>>> converter(123132132.13, "$")
'$123,132,132.13'

>>> converter(-123132132.13, "$")
'-$123,132,132.13'

간단한 파이썬 코드!

def format_us_currency(value):
    value=str(value)
    if value.count(',')==0:
        b,n,v='',1,value
        value=value[:value.rfind('.')]
        for i in value[::-1]:
            b=','+i+b if n==3 else i+b
            n=1 if n==3 else n+1
        b=b[1:] if b[0]==',' else b
        value=b+v[v.rfind('.'):]
    return '$'+(value.rstrip('0').rstrip('.') if '.' in value else value)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top