我想将整数格式的格式化为格式正确的货币。示例10000到或₹10,000
所以,我在python中使用以下命令
import locale
locale.setlocale(locale.LC_MONETARY, 'en_US')
or
locale.setlocale(locale.LC_MONETARY, 'en_IN')
print str(locale.currency(10000, grouping=True))
当我在不同笔记本电脑的ubuntu中使用python中的上述命令时,它们工作得很好。但是,在Windows上,它们无法正常工作。
它给我的错误如下
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\locale.py", line 581, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting
如何解决此错误?
我正在使用Windows 10.我打开cmd并键入&#34; python&#34;输入。 python shell提供以下版本。在那里我输入上面的命令。
Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
注意: - 我尝试将locale.py文件从ubuntu系统中的python目录复制到Windows目录,即&#34; C:\ Python27 \ Lib&#34;但它仍无法正常工作。
答案 0 :(得分:2)
您可以查看pycountry库,以获得Windows和Linux语言代码之间的映射:
>>> pycountry.languages.lookup('fr')
Language(alpha_2=u'fr', alpha_3=u'fra', bibliographic=u'fre', name=u'French', scope=u'I', type=u'L')
>>> pycountry.languages.lookup('french')
Language(alpha_2=u'fr', alpha_3=u'fra', bibliographic=u'fre', name=u'French', scope=u'I', type=u'L')
>>> pycountry.languages.lookup('chinese')
Language(alpha_2=u'zh', alpha_3=u'zho', bibliographic=u'chi', name=u'Chinese', scope=u'M', type=u'L')
>>> pycountry.languages.lookup('chinese-traditional')
Traceback (most recent call last):
...
LookupError: Could not find a record for 'chinese-traditional'
然后你可以这样做:
import os
import locale
import pycountry
lang = "en_IN" # your code
language = pycountry.languages.lookup(lang)
if os.name == "posix":
locale.setlocale(locale.LC_MONETARY, language.alpha_2)
else:
locale.setlocale(locale.LC_MONETARY, language.name)
修改强>
要格式化货币值,您可以考虑使用Babel,例如:
>>> babel.numbers.format_currency(10000, 'INR', locale='en_IN')
u'\u20b9\xa010,000.00'
>>> print(babel.numbers.format_currency(10000, 'INR', locale='en_IN'))
₹ 10,000.00
答案 1 :(得分:1)
import locale
locale.setlocale(locale.LC_ALL,'enn')
>>'English_India.1252'
locale.currency(10000000.32,grouping=True,symbol=True)
>>'? 1,00,00,000.32'
locale.currency(10000000.32,grouping=True,symbol=True).replace('?','₹')
>>'₹ 1,00,00,000.32'
答案 2 :(得分:0)
对于Windows,您需要设置locale.setlocale(locale.LC_ALL, '<language string>')
https://msdn.microsoft.com/en-us/library/39cwe7zf(vs.71).aspx(已弃用)
https://msdn.microsoft.com/en-us/library/39cwe7zf(v=vs.140).aspx(已更新)。