파이썬의 통화 형식
파이썬을 사용하여 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의 Babel 패키지(및 장고 유틸리티)는 통화 형식 지정(및 다른 많은 i18n 작업)에 훌륭합니다.핵심 Python 로케일 모듈처럼 글로벌하게 모든 작업을 수행할 필요가 없기 때문에 좋습니다.
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
그리고 원래 포스터는, 분명히, 그냥 바꿔주세요.$
위해서£
"{:0,.2f}".format(float(your_numeric_value))
Python 3에서는 다음 행 중 하나를 제공합니다.
10,938.29
10,899.00
10,898.99
2,328.99
로케일 설정이 불완전한 것 같아서 이 SO 답변을 넘어서야 했고 다음을 발견했습니다.
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')
내가 너라면, 나는 BABEL을 사용할 것입니다: http://babel.pocoo.org/en/latest/index.html
from babel.numbers import format_decimal
format_decimal(188518982.18, locale='en_US')
여기에는 이미 12개의 솔루션이 있지만, 다음과 같은 이유로 아래 솔루션이 가장 좋다고 생각합니다.
- 그것은 간단하다.
- OS 로케일을 준수합니다.
- 외부 lib가 필요하지 않습니다.
- 당신은 그것을 간결하게 만들 수 있습니다.
내 해결책은 다음과 같습니다.locale.currency()
방법:
import locale
# this sets locale to the current Operating System value
locale.setlocale(locale.LC_ALL, '')
print(locale.currency(1346896.67444, grouping=True, symbol=True)
브라질 포르투갈어로 구성된 Windows 10에서 출력됩니다.
R$ 1.346.896,67
다소 장황하기 때문에 많이 사용할 경우 일부 매개 변수를 미리 정의하고 더 짧은 이름을 사용하여 f-string 내부에 사용하는 것이 좋습니다.
fmt = lambda x: locale.currency(x, grouping=True, symbol=True)
print(f"Value: {fmt(1346896.67444)}"
의 로케일 값을 전달할 수 있습니다.setlocale
방법, 하지만 그 가치는 OS에 따라 다르므로 주의해야 합니다.*nix 서버에 있는 경우 원하는 로케일이 OS에 올바르게 설치되어 있는지도 확인해야 합니다.
기호 전달 기능을 해제할 수도 있습니다.symbol=False
.
오, 재미있는 짐승이군요.
나는 그것을 바로잡는 데 상당한 시간을 소비했다, 지역마다 다른 세 가지 주요 문제가 있다: - 통화 기호와 방향 - 천 구분 기호 - 소수점.
저는 키위 파이썬 프레임워크의 일부인 이것에 대한 다소 광범위한 구현을 작성했습니다. 여기에서 LGPL:ed 소스를 확인하십시오.
http://svn.async.com.br/cgi-bin/viewvc.cgi/kiwi/trunk/kiwi/currency.py?view=markup
코드는 약간 Linux/Glibc에 한정되지만 윈도우나 다른 유닉스에 적용하는 것은 그리 어렵지 않습니다.
설치가 완료되면 다음 작업을 수행할 수 있습니다.
>>> from kiwi.datatypes import currency
>>> v = currency('10.5').format()
그러면 다음과 같은 이점을 얻을 수 있습니다.
'$10.50'
또는
'10,50 kr'
현재 선택한 로케일에 따라 다릅니다.
이 게시물의 주요 포인트는 이전 버전의 파이썬에서 작동한다는 것입니다.locale.dll은 python 2.5에 도입되었습니다.
#'Total:' 변수를 '9,348.237'과 같은 형식으로 인쇄
print ('Total:', '{:7,.3f}'.format(zum1))
여기서 '{:7,.3f}' e는 소수점 3개를 가진 백만 개의 숫자 형식 지정 공간입니다.그런 다음 '.format(zum1)'을 추가합니다.zum1은 제 특정 프로그램에서 모든 숫자의 합에 대해 큰 숫자를 가진 변수입니다.변수는 사용하기로 결정한 모든 변수가 될 수 있습니다.
위의 코드에서 영감을 받았습니다.d
def money_format(value):
value = str(value).split('.')
money = ''
count = 1
for digit in value[0][::-1]:
if count != 3:
money += digit
count += 1
else:
money += f'{digit},'
count = 1
if len(value) == 1:
money = ('$' + money[::-1]).replace('$-','-$')
else:
money = ('$' + money[::-1] + '.' + value[1]).replace('$-','-$')
return money
@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)
언급URL : https://stackoverflow.com/questions/320929/currency-formatting-in-python
'programing' 카테고리의 다른 글
pl/sql 저장 프로시저: 매개 변수 이름이 열 이름과 같습니다. (0) | 2023.07.10 |
---|---|
Spring Fox를 사용한 Spring Boot Swagger 구현 'documentation Plugins Bootstrapper' 시작 실패 (0) | 2023.07.10 |
asp.net 텍스트 상자에 정수 값이 있는지 확인하기 위한 유효성 검사 (0) | 2023.07.10 |
data.table에서 참조하여 행을 삭제하는 방법은 무엇입니까? (0) | 2023.07.10 |
ASP.NET ID 인터페이스에서 기본 키와 외부 키에 문자열을 사용하는 이유는 무엇입니까? (0) | 2023.07.10 |