2011-04-01 16 views
46

पर जोड़ें, मैं 1000000 को 1.000.000 को पायथन में कैसे प्रारूपित करूं? जहां '।' दशमलव चिह्न हजारों विभाजक है।'दशमलव-चिह्न' हजारों विभाजक को

+2

कृपया अपने प्रश्न को स्पष्ट करें। कुछ कोड दिखाएं, उस ऑब्जेक्ट के डेटा प्रकार का उल्लेख करें जिसे आप मुद्रित करना चाहते हैं, उदाहरण आउटपुट दें। –

+0

@ स्वेनमार्कैच: मैं दूसरा हूं! – Trufa

+0

आपके पास एक नंबर में एक से अधिक दशमलव बिंदु नहीं हो सकते हैं। '1.000.000' का मतलब क्या है? क्या आपका मतलब अल्पविराम है? –

उत्तर

95

आप एक हज़ार विभाजक जोड़ना चाहते हैं, तो आप लिख सकते हैं:

>>> '{0:,}'.format(1000000) 
'1,000,000' 

लेकिन यह केवल काम करता है पायथन 2.7 और उच्चतर में।

format string syntax देखें।

पुराने संस्करणों में, आप locale.format() उपयोग कर सकते हैं:

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, '') 
'en_AU.utf8' 
>>> locale.format('%d', 1000000, 1) 
'1,000,000' 

locale.format() का उपयोग कर के अतिरिक्त लाभ यह है कि यह अपने स्थान के हज़ार विभाजक, उदा का उपयोग करेगा

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, 'de_DE.utf-8') 
'de_DE.utf-8' 
>>> locale.format('%d', 1000000, 1) 
'1.000.000' 
+1

यदि आप मुद्राओं के साथ काम कर रहे हैं, तो आप babel.numbers.format_currency सहायक का भी उपयोग कर सकते हैं। – semente

+2

फ्लोट के लिए वाक्यविन्यास '{: 6, .2f} 'है जहां' 6' फ़ील्ड चौड़ाई है और '2' सटीकता है। कॉमा के प्लेसमेंट ने मुझे थोड़ी सी जगह दी। – nathanielobrown

+0

आप सभी इंस्टॉल किए गए लोकल को "$ locale -a" के साथ देख सकते हैं, उदाहरण के लिए एक डिफ़ॉल्ट उबंटू इंस्टॉलेशन में केवल en_US होगा, इसलिए यह एक व्यवहार्य रणनीति नहीं है। – xApple

17

मुझे वास्तव में यह समझ में नहीं आया; लेकिन यहां मैं समझता हूं:

आप 1123000 से 1,123,000 रूपांतरित करना चाहते हैं। आप ऐसा कर सकते हैं प्रारूप का उपयोग करके:

http://docs.python.org/release/3.1.3/whatsnew/3.1.html#pep-378-format-specifier-for-thousands-separator

उदाहरण:

>>> format(1123000,',d') 
'1,123,000' 
+0

आपके उत्तर में भाषा कुछ हद तक भ्रमित है। शायद आप इसे सुधार सकते हैं? – Zero3

12

बस थोड़ा यहाँ जवाब का विस्तार :)

मैं दोनों के लिए आवश्यक एक हज़ारवां विभाजक है और एक चल बिन्दु संख्या की शुद्धता की सीमा।

यह निम्न स्वरूप स्ट्रिंग का उपयोग करके प्राप्त किया जा सकता:

> my_float = 123456789.123456789 
> "{:0,.2f}".format(my_float) 
'123,456,789.12' 

यह format() -specifier के मिनी भाषा में बताता है:

[[fill]align][sign][#][0][width][,][.precision][type] 

स्रोत: https://www.python.org/dev/peps/pep-0378/#current-version-of-the-mini-language

+2

क्या होगा यदि वह निम्नलिखित आउटपुट प्राप्त करना चाहता था: '123.456.789,12''? –

+0

@ dot.Py वह उपयुक्त लोकेल 'locale.setlocale (locale.LC_ALL,' de_DE.utf-8 ') सेट कर सकता है, फिर '(" {:।% Dn} "% (math.log10 (my_float) + 3))। प्रारूप (my_float) 'हालांकि' n 'प्रारूप स्ट्रिंग लोकल को' f 'के बजाय' g 'के समतुल्य समकक्ष है, इसलिए परिशुद्धता क्षेत्र गन्दा हो जाता है। – Duncan

1

itertools का उपयोग दे सकता है आप कुछ और लचीलापन:

>>> from itertools import zip_longest 
>>> num = "1000000" 
>>> sep = "." 
>>> places = 3 
>>> args = [iter(num[::-1])] * places 
>>> sep.join("".join(x) for x in zip_longest(*args, fillvalue=""))[::-1] 
'1.000.000' 
0

यहां केवल एक वैकल्पिक उत्तर है। आप अजगर में और कुछ अजीब तर्क के माध्यम से विभाजन ऑपरेटर का उपयोग कर सकते हैं यहाँ कोड

i=1234567890 
s=str(i) 
str1="" 
s1=[elm for elm in s] 
if len(s1)%3==0: 
    for i in range(0,len(s1)-3,3): 
     str1+=s1[i]+s1[i+1]+s1[i+2]+"." 
    str1+=s1[i]+s1[i+1]+s1[i+2] 
else: 
    rem=len(s1)%3 
    for i in range(rem): 
     str1+=s1[i] 
    for i in range(rem,len(s1)-1,3): 
     str1+="."+s1[i]+s1[i+1]+s1[i+2] 

print str1 

आउटपुट

1.234.567.890 
1

मिकेल द्वारा उत्तर पर ड्राइंग है, मैं अपने matplotlib साजिश में इस तरह उसके समाधान लागू। मुझे लगा कि कुछ इसे उपयोगी पाते हैं:

ax=plt.gca() 
ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, loc: locale.format('%d', x, 1)))