Convert an amount to Indian Notation in Python

前端 未结 5 702
离开以前
离开以前 2021-01-02 03:40

Problem: I need to convert an amount to Indian currency format

My code: I have the following Python implementation:

相关标签:
5条回答
  • 2021-01-02 04:20

    Too much work.

    >>> import locale
    >>> locale.setlocale(locale.LC_MONETARY, 'en_IN')
    'en_IN'
    >>> print(locale.currency(100.52, grouping=True))
    ₹ 100.52
    >>> print(locale.currency(1000.108, grouping=True))
    ₹ 1,000.11
    >>> print(locale.currency(1200000, grouping=True))
    ₹ 12,00,000.00
    
    0 讨论(0)
  • 2021-01-02 04:24

    Here is the other way around:

    import re
    def in_for(value):
        value,b=str(value),''
        value=''.join(map(lambda va:va if re.match(r'[0-9,.]',va) else '',value))
        val=value
        if val.count(',')==0:
            v,c,a,cc,ii=val,0,[3,2,2],0,0
            val=val[:val.rfind('.')] if val.rfind('.')>=0  else val
            for i in val[::-1]:
                if c==ii and c!=0:
                    ii+=a[cc%3]
                    b=','+i+b
                    cc+=1  
                else:
                    b=i+b
                c+=1
            b=b[1:] if b[0]==',' else b
            val=b+v[value.rfind('.'):]  if value.rfind('.')>=0  else b
        else:
            val=str(val).strip('()').replace(' ','')
        v=val.rfind('.')
        if v>0:
            val=val[:v+3]
        return val.rstrip('0').rstrip('.') if '.' in val else val
    
    print(in_for('1000000000000.5445'))
    

    Output will be:

    10,000,00,00,000.54 
    

    (As mentioned in wikipedia indian number system Ex:67,89,000,00,00,000)

    0 讨论(0)
  • 2021-01-02 04:25

    You can follow these steps. Install Babel python package from pip

    pip install Babel
    

    In your python script

    from babel.numbers import format_currency
    format_currency(5433422.8012, 'INR', locale='en_IN')
    

    Output:

    ₹ 54,33,422.80
    
    0 讨论(0)
  • 2021-01-02 04:29

    Couldn't make the other two solutions work for me, so I made something a little more low-tech:

    def format_as_indian(input):
        input_list = list(str(input))
        if len(input_list) <= 1:
            formatted_input = input
        else:
            first_number = input_list.pop(0)
            last_number = input_list.pop()
            formatted_input = first_number + (
                (''.join(l + ',' * (n % 2 == 1) for n, l in enumerate(reversed(input_list)))[::-1] + last_number)
            )
    
            if len(input_list) % 2 == 0:
                formatted_input.lstrip(',')
    
        return formatted_input
    

    This doesn't work with decimals. If you need that, I would suggest saving the decimal portion into another variable and adding it back in at the end.

    0 讨论(0)
  • 2021-01-02 04:35
    def format_indian(t):
    dic = {
        4:'Thousand',
        5:'Lakh',
        6:'Lakh',
        7:'Crore',
        8:'Crore',
        9:'Arab'
    }
    y = 10
    len_of_number = len(str(t))
    save = t
    z=y
    while(t!=0):
       t=int(t/y)
       z*=10
    
    zeros = len(str(z)) - 3
    if zeros>3:
        if zeros%2!=0:
            string = str(save)+": "+str(save/(z/100))[0:4]+" "+dic[zeros]
        else:   
            string = str(save)+": "+str(save/(z/1000))[0:4]+" "+dic[zeros]
        return string
    return str(save)+": "+str(save)
    

    This code will Convert Yout Numbers to Lakhs, Crores and arabs in most simplest way. Hope it helps.

    for i in [1.234567899 * 10**x for x in range(9)]:
    print(format_indian(int(i)))
    

    Output:

    1: 1
    12: 12
    123: 123
    1234: 1234
    12345: 12.3 Thousand
    123456: 1.23 Lakh
    1234567: 12.3 Lakh
    12345678: 1.23 Crore
    123456789: 12.3 Crore
    
    0 讨论(0)
提交回复
热议问题