2010-07-01 18 views
5

वहाँ एक अजगर पुस्तकालय है कि इस तरह के रूप में संख्या बनाना होगा है यह अधिक मानव पठनीयअजगर मानव पठनीय बड़ी संख्या

$ 187.280.840.422.780

संपादित: उदाहरण के लिए iw इस के उत्पादन में चींटी 187 खरब सिर्फ कॉमा से अलग किए नहीं होने के लिए । इसलिए मैं उत्पादन अरबों, लाखों, अरबों आदि

+15

मेरी इच्छा है कि मेरे पास इतना पैसा था। –

+1

क्लिसप स्थापित करें और इसे लिखें: '(प्रारूप टी "~ आर" (पार्स-इंटीजर (रीड-लाइन * मानक-इनपुट *))) फिर 'clisp prettynum.cl 187,000,000,000,000' पर कॉल करने के लिए उपप्रोसेसर का उपयोग करें ... हालांकि मैं बस एक विकल्प के बारे में पूछा http://stackoverflow.com/questions/3158132/is-there-a-python-version-of-lisps-format-r –

+0

['पायथन-बॉलपार्क'] (https://github.com/ debrouwere/पायथन-बॉलपार्क) ओपी के लिए पूछताछ के लिए बिल्कुल डिजाइन किया गया प्रतीत होता है। –

उत्तर

31

के रूप में मैं इसे समझते हैं, आप केवल 'सबसे महत्वपूर्ण' भाग चाहते हैं। ऐसा करने के लिए, अंकों की संख्या प्राप्त करने के लिए floor(log10(abs(n))) का उपयोग करें और फिर वहां से जाएं। कुछ इस तरह, हो सकता है:

import math 

millnames = ['',' Thousand',' Million',' Billion',' Trillion'] 

def millify(n): 
    n = float(n) 
    millidx = max(0,min(len(millnames)-1, 
         int(math.floor(0 if n == 0 else math.log10(abs(n))/3)))) 

    return '{:.0f}{}'.format(n/10**(3 * millidx), millnames[millidx]) 

अलग नंबरों का एक समूह के लिए ऊपर समारोह चल रहा है:

for n in (1.23456789 * 10**r for r in range(-2, 19, 1)): 
    print('%20.1f: %20s' % (n,millify(n))) 
       0.0:     0 
       0.1:     0 
       1.2:     1 
       12.3:     12 
       123.5:     123 
       1234.6:   1 Thousand 
      12345.7:   12 Thousand 
      123456.8:   123 Thousand 
      1234567.9:   1 Million 
      12345678.9:   12 Million 
     123456789.0:   123 Million 
     1234567890.0:   1 Billion 
     12345678900.0:   12 Billion 
     123456789000.0:   123 Billion 
    1234567890000.0:   1 Trillion 
    12345678900000.0:   12 Trillion 
    123456789000000.0:   123 Trillion 
    1234567890000000.0:  1235 Trillion 
12345678899999998.0:  12346 Trillion 
123456788999999984.0:  123457 Trillion 
1234567890000000000.0:  1234568 Trillion 
+2

मुझे शायद यह इंगित करना चाहिए कि अरबों का उपयोग करके ट्रिलियन का अर्थ महाद्वीपीय यूरोप में नहीं है जैसा कि यह अमेरिका में करता है। यहां तक ​​कि ब्रिटेन ने हाल ही में अमेरिकी सम्मेलन को अपनाया नहीं है। Http://en.wikipedia.org/wiki/Long_and_short_scales – Janus

+4

देखें परिणाम एसआई इकाई उपसर्गों का उपयोग करके व्यक्त किया जाना चाहिए, यानी।किलोडोलार, मेगाडोलर्स, गिगाडोलार इत्यादि :) – tzot

+0

@ टोजोट एलओएल लेकिन यह ऐसा कुछ है जिसे मैं उपयोग कर सकता था। –

1

होने की here से हैं:

def commify(n): 
    if n is None: return None 
    if type(n) is StringType: 
     sepdec = localenv['mon_decimal_point'] 
    else: 
     #if n is python float number we use everytime the dot 
     sepdec = '.' 
    n = str(n) 
    if sepdec in n: 
     dollars, cents = n.split(sepdec) 
    else: 
     dollars, cents = n, None 

    r = [] 
    for i, c in enumerate(reversed(str(dollars))): 
     if i and (not (i % 3)): 
      r.insert(0, localenv['mon_thousands_sep']) 
     r.insert(0, c) 
    out = ''.join(r) 
    if cents: 
     out += localenv['mon_decimal_point'] + cents 
    return out 
1

वह नंबर मेरे लिए बहुत मानव पठनीय लगता है। एक असभ्य संख्या 18728 9 840422780.00 होगी। अल्पविराम के जोड़ने के लिए, आप (मैं this पाया जाता है) एक के लिए खोज अपने खुद के समारोह बना सकते हैं या:

import re 

def comma_me(amount): 
    orig = amount 
    new = re.sub("^(-?\d+)(\d{3})", '\g<1>,\g<2>', amount) 
    if orig == new: 
     return new 
    else: 
     return comma_me(new) 

f = 12345678 
print comma_me(`f`) 
Output: 12,345,678 

आप इसे अधिक पठनीय बनाने के लिए एक नंबर पूर्णांक बनाना चाहते हैं, तो उसके लिए एक अजगर समारोह है: round()

आप वास्तविक डेटा से और भी आगे बढ़ सकते हैं और एक ऐसे फ़ंक्शन का उपयोग करके "बहुत अधिक राशि" या "100 ट्रिलियन से ऊपर" कह सकते हैं जो आपके प्रोग्राम किए गए मानक के आधार पर एक अलग मूल्य लौटाएगा।

10

था कि स्थान के साथ दूसरे दिन:

import locale 
locale.setlocale(locale.LC_ALL, 'en_US') 
locale.format('%d', 2**32, grouping=True) # returns '4,294,967,296' 

वहाँ एक बेहतर है 2.7 में इसे करने का तरीका, पीईपी 378 देखें: अधिक जानकारी के लिए हजारों सेपरेटर के लिए प्रारूप निर्दिष्ट:

http://www.python.org/dev/peps/pep-0378/

संपादित करें (2014): इन दिनों मैं बजाय निम्नलिखित खोल समारोह है:

human_readable_numbers() { 
    python2.7 -c "print('{:,}').format($1)" 
} 

का आनंद लें!

संबंधित मुद्दे