在Python中将金额转换为Indian Notation

Use*_*yen 8 python formatting currency

问题:我需要将金额转换为印度货币格式

我的代码:我有以下Python实现:

import decimal
def currencyInIndiaFormat(n):
  d = decimal.Decimal(str(n))
  if d.as_tuple().exponent < -2:
    s = str(n)
  else:
    s = '{0:.2f}'.format(n)
  l = len(s)
  i = l-1;
  res = ''
  flag = 0
  k = 0
  while i>=0:
    if flag==0:
      res = res + s[i]
      if s[i]=='.':
        flag = 1
    elif flag==1:
      k = k + 1
      res = res + s[i]
      if k==3 and i-1>=0:
        res = res + ','
        flag = 2
        k = 0
    else:
      k = k + 1
      res = res + s[i]
      if k==2 and i-1>=0:
        res = res + ','
        flag = 2
        k = 0
    i = i - 1

  return res[::-1]

def main():
  n = 100.52
  print "INR " + currencyInIndiaFormat(n)  # INR 100.52
  n = 1000.108
  print "INR " + currencyInIndiaFormat(n)  # INR 1,000.108
  n = 1200000
  print "INR " + currencyInIndiaFormat(n)  # INR 12,00,000.00

main()
Run Code Online (Sandbox Code Playgroud)

我的问题:有没有办法让currencyInIndiaFormat功能更短,更简洁干净?/有没有更好的方法来编写currencyInIndiaFormat函数?

注意:我的问题主要是基于Python上述问题的实施.这与以前有关将货币转换为印度格式的问题不重复.

印度货币格式:

例如,此处的数字表示为:

1
10
100
1,000
10,000
1,00,000
10,00,000
1,00,00,000
10,00,00,000
Run Code Online (Sandbox Code Playgroud)

参考印度编号系统

小智 17

简单版本:

\n
def formatINR(number):\n    s, *d = str(number).partition(".")\n    r = ",".join([s[x-2:x] for x in range(-3, -len(s), -2)][::-1] + [s[-3:]])\n    return "".join([r] + d)\n
Run Code Online (Sandbox Code Playgroud)\n

样本:

\n
print(formatINR(123456))\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
1,23,456\n
Run Code Online (Sandbox Code Playgroud)\n

如果你想处理负数和字符串,

\n
def formatINR(number):\n    number = float(number)\n    number = round(number,2)\n    is_negative = number < 0\n    number = abs(number)\n    s, *d = str(number).partition(".")\n    r = ",".join([s[x-2:x] for x in range(-3, -len(s), -2)][::-1] + [s[-3:]])\n    value = "".join([r] + d)\n    if is_negative:\n       value = '-' + value\n    return '\xe2\x82\xb9'+ value\n
Run Code Online (Sandbox Code Playgroud)\n

样本:

\n
print(formatINR('-004.256'))\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
\xe2\x82\xb9-4.26\n
Run Code Online (Sandbox Code Playgroud)\n

  • 为什么这没有得到更多的支持?这是最简单的解决方案! (4认同)

Ign*_*ams 8

太多的工作.

>>> 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
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用,我收到以下消息错误:不支持的区域设置 (7认同)
  • 然后安装语言环境,或使用类似的语言环境。 (2认同)

nav*_*ule 5

您可以按照以下步骤。从pip安装Babel python软件包

pip install Babel
Run Code Online (Sandbox Code Playgroud)

在您的python脚本中

from babel.numbers import format_currency
format_currency(5433422.8012, 'INR', locale='en_IN')
Run Code Online (Sandbox Code Playgroud)

输出:

? 54,33,422.80
Run Code Online (Sandbox Code Playgroud)