जवाबों:
लोकेल मॉड्यूल देखें ।
यह मुद्रा (और तारीख) प्रारूपण करता है।
>>> 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'
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
और इसने पूरी तरह से काम किया!
>>> '{:20,.2f}'.format(18446744073709551616.0)
'18,446,744,073,709,551,616.00'
$ 123,456.78
कभी-कभी हालांकि परिणाम होगा । संपादित करें: मार्कडाउन अतिरिक्त स्थानों को बाहर निकालता है, दिखावा करता है कि $ और संख्याओं के बीच अधिक है
यह बिल्कुल निश्चित नहीं है कि इसका अधिक ऑनलाइन उल्लेख क्यों नहीं किया गया है (या इस धागे पर), लेकिन एजगेल के लोगों का बैबल पैकेज (और Django उपयोगिताओं) मुद्रा प्रारूपण (और अन्य i18n कार्यों के बहुत सारे) के लिए भयानक है। यह अच्छा है क्योंकि यह कोर पायथन लोकेल मॉड्यूल की तरह विश्व स्तर पर सब कुछ करने की आवश्यकता से ग्रस्त नहीं है।
ओपी ने जो उदाहरण दिया वह बस होगा:
>>> import babel.numbers
>>> import decimal
>>> babel.numbers.format_currency( decimal.Decimal( "188518982.18" ), "GBP" )
£188,518,982.18
locale
लिए तर्क का format_currency
उपयोग किया जा सकता है, लेकिन या तो वह चार साल पहले डॉक्टर में नहीं था (जब मैंने वह टिप्पणी लिखी थी) या मैंने सिर्फ इस उत्तर के कोड का परीक्षण किया है-जैसा कि डॉक्टर की जाँच के बिना है।
यह एक प्राचीन पोस्ट है, लेकिन मैंने सिर्फ निम्नलिखित समाधान को लागू किया है:
कोड:
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
और मूल पोस्टर के लिए, स्पष्ट रूप से, बस स्विच $
के लिए£
print(f'Value is: ${value:,.2f}'.replace('$-', '-$'))
मेरी लोकेल सेटिंग अधूरी लग रही थी, इसलिए मैं भी इस SO उत्तर से परे था और पाया:
http://docs.python.org/library/decimal.html#recipes
ओएस स्वतंत्र
बस यहाँ साझा करना चाहता था।
def moneyfmt(value, places=2, curr='', sep=',', dp='.', pos='', neg='-', trailneg='')
?
यदि आप 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')
"{:0,.2f}".format(float(your_numeric_value))
पायथन 3 में काम करता है; यह निम्नलिखित लाइनों में से एक की तरह कुछ देता है:
10,938.29
10,899.00
10,898.99
2,328.99
अगर मैं तुम होते, मैं BABEL का उपयोग करता: http://babel.pocoo.org/en/latest/index.html
from babel.numbers import format_decimal
format_decimal(188518982.18, locale='en_US')
format_currency
।
ओह, यह एक दिलचस्प जानवर है।
मैंने उस अधिकार को प्राप्त करने में काफी समय बिताया है, तीन मुख्य मुद्दे हैं जो स्थानीय से भिन्न होते हैं: - मुद्रा प्रतीक और दिशा - हजार विभाजक - दशमलव बिंदु
मैंने अपना स्वयं का व्यापक कार्यान्वयन लिखा है जो कि कीवी अजगर ढांचे का एक हिस्सा है, एलजीपीएल देखें: अन्य स्रोत यहां देखें:
http://svn.async.com.br/cgi-bin/viewvc.cgi/kiwi/trunk/kiwi/currency.py?view=markup
कोड थोड़ा लिनक्स / ग्लिबक विशिष्ट है, लेकिन विंडोज़ या अन्य यूनिक्स को अपनाने के लिए बहुत मुश्किल नहीं होना चाहिए।
एक बार जब आप स्थापित कर लेते हैं तो आप निम्न कार्य कर सकते हैं:
>>> from kiwi.datatypes import currency
>>> v = currency('10.5').format()
जो तब आपको देगा:
'$10.50'
या
'10,50 kr'
वर्तमान में चयनित स्थान के आधार पर।
इस पोस्ट में मुख्य बात यह है कि यह अजगर के पुराने संस्करणों के साथ काम करेगा। locale.currency को अजगर 2.5 में पेश किया गया था।
10,50 kr
इसके बजाय एक फायदा होगा kr 10,50
।
# वेरिएंट 'टोटल:' को इस फॉर्मेट में '9,348.237' जैसा दिखता है।
print ('Total:', '{:7,.3f}'.format(zum1))
जहां '{: 7, .3f}' इस मामले में संख्या को स्वरूपित करने के लिए रिक्त स्थान की संख्या 3 दशमलव अंकों के साथ एक मिलियन है। फिर आप '.format (zum1) जोड़ें। Zum1 था चर है जो मेरे विशेष कार्यक्रम में सभी संख्या के योग के लिए बड़ी संख्या है। चर कुछ भी हो सकता है जिसे आप उपयोग करने का निर्णय लेते हैं।
उपरोक्त कोड से प्रेरित: डी
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)
"$2,129.1468284147656"
, "$10,948.3742933"
, "$1,0908"
। स्ट्रिंग को तराशता है।
locale
मुद्रा के मूल्य के मॉड्यूल के उपयोग और उस मुद्रा के प्रदर्शन गुणों को डिकोड करके भाषा में लागू नहीं किया गया है ।