2016-06-01 4 views
4

Я изучаю от Currency formatting in Python, используя модуль locale для форматирования чисел в качестве валюты. Например,Формат чисел в валюте в Python

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 

import locale 

value = 123456789 

l = locale.setlocale(locale.LC_ALL, '')  # LC_CTYPE=en_US.UTF-8;LC_NUMERIC=fr_FR.UTF-8;LC_TIME=fr_FR.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=fr_FR.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=fr_FR.UTF-8;LC_NAME=fr_FR.UTF-8;LC_ADDRESS=fr_FR.UTF-8;LC_TELEPHONE=fr_FR.UTF-8;LC_MEASUREMENT=fr_FR.UTF-8;LC_IDENTIFICATION=fr_FR.UTF-8 
s = locale.currency(value, grouping=True) # 123 456 789,00 € 

locale.setlocale(locale.LC_ALL, 'en_US.utf-8') 
s = locale.currency(value, grouping=True) # $123,456,789.00 

locale.setlocale(locale.LC_ALL, 'en_US') # WHY? locale.Error: unsupported locale setting 
s = locale.currency(value, grouping=True) 

Я хотел бы форматировать числа в другую валюту, скажем de_DE. Я столкнулся с проблемой locale.Error: unsupported locale setting, так как локаль de_DE отсутствует в списке locale -a.

locale.setlocale(locale.LC_ALL, 'de_DE')  # locale.Error: unsupported locale setting 
s = locale.currency(value, grouping=True) 

Одним из решений является добавление этого языка в мою машину. Есть ли способ лучше?

ответ

4

babel.numbers

In [22]: from babel.numbers import format_decimal 
In [23]: format_decimal(12345, locale='de_DE') 
Out[23]: u'12.345' 

In [24]: format_decimal(1.2345, locale='sv_SE') 
Out[24]: u'1,234' 

Или в вашем случае format_currency:

In [7]: from babel.numbers import format_currency 

In [8]: print format_currency(1099.98, 'USD', locale='en_US') 
$1,099.98 

In [9]: print format_currency(1099.98, 'USD', locale='es_CO') 
1.099,98 US$ 

In [10]: print format_currency(1099.98, 'EUR', locale='de_DE') 
1.099,98 € 
+0

Thx. Я только что нашел ['babel.numbers.format_currency'] (http://babel.pocoo.org/en/latest/api/numbers.html) под вашим руководством. – SparkAndShine

+0

Не беспокойтесь, это довольно аккуратная библиотека, она делает множество вещей. Я добавил ссылку на format_currency и пример doc. –

+1

Я знаю, что вы можете разбирать без знака доллара, если вы передадите локаль, но с '$ 123,456,789.00' Я не уверен, как и если вы можете с этим справиться. http://babel.pocoo.org/en/latest/numbers.html#parsing-numbers –

Смежные вопросы