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
简单版本:
\ndef 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样本:
\nprint(formatINR(123456))\n
Run Code Online (Sandbox Code Playgroud)\n输出:
\n1,23,456\n
Run Code Online (Sandbox Code Playgroud)\n如果你想处理负数和字符串,
\ndef 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样本:
\nprint(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
太多的工作.
>>> 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)
您可以按照以下步骤。从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)