用Python将一个数量转换成印度符号

2024-10-01 13:40:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的代码:我有以下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()

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

注意:我的问题主要基于上述问题的Python实现。这并不是之前所问的关于将货币兑换成印度货币的问题的重复。

印度货币格式:

例如,这里的数字表示为:

^{pr2}$

参考Indian Numbering System


Tags: andifmaindef格式货币res金额
3条回答

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

pip install Babel

在python脚本中

^{pr2}$

输出:

₹ 54,33,422.80

工作太多了。在

>>> 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

其他两种解决方案都不适合我,所以我做了一些技术含量较低的东西:

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

这不适用于小数。如果需要的话,我建议将小数部分保存到另一个变量中,并在最后将其添加回来。在

相关问题 更多 >