Locale dependent formatting and parsing of numeric data.
The default locale for the functions in this module is determined by the following environment variables, in that order:
- LC_NUMERIC,
- LC_ALL, and
- LANG
Unknown Field: copyright | |
| |
Unknown Field: license | |
BSD, see LICENSE for more details. |
Class | NumberFormatError |
Exception raised when a string cannot be parsed into a number. |
Function | format_currency |
Return formatted currency value. |
Function | format_decimal |
Return the given decimal number formatted for a specific locale. |
Function | format_number |
Return the given number formatted for a specific locale. |
Function | format_percent |
Return formatted percent value for a specific locale. |
Function | format_scientific |
Return value formatted in scientific notation for a specific locale. |
Function | get_currency_name |
Return the name used by the locale for the specified currency. |
Function | get_currency_symbol |
Return the symbol used by the locale for the specified currency. |
Function | get_currency_unit_pattern |
No summary |
Function | get_decimal_symbol |
Return the symbol used by the locale to separate decimal fractions. |
Function | get_minus_sign_symbol |
Return the plus sign symbol used by the current locale. |
Function | get_plus_sign_symbol |
Return the plus sign symbol used by the current locale. |
Function | get_territory_currencies |
No summary |
Function | parse_decimal |
Parse localized decimal string into a decimal. |
Function | parse_number |
Parse localized number string into an integer. |
Constant | LC_NUMERIC |
Undocumented |
Constant | NUMBER_PATTERN |
Undocumented |
Constant | NUMBER_TOKEN |
Undocumented |
Constant | PREFIX_END |
Undocumented |
Constant | PREFIX_PATTERN |
Undocumented |
Constant | SUFFIX_PATTERN |
Undocumented |
Variable | number_re |
Undocumented |
Class | NumberPattern |
No class docstring; 0/9 instance variable, 3/9 methods documented |
Class | UnknownCurrencyError |
Exception thrown when a currency is requested for which no data is available. |
Class | UnknownCurrencyFormatError |
Exception raised when an unknown currency format is requested. |
Function | _format_currency_long_name |
Undocumented |
Function | get_currency_precision |
Return currency's precision. |
Function | get_decimal_precision |
Return maximum precision of a decimal instance's fractional part. |
Function | get_decimal_quantum |
Return minimal quantum of a number, as defined by precision. |
Function | get_exponential_symbol |
Return the symbol used by the locale to separate mantissa and exponent. |
Function | get_group_symbol |
Return the symbol used by the locale to separate groups of thousands. |
Function | is_currency |
Returns True only if a currency is recognized by Babel. |
Function | list_currencies |
Return a set of normalized currency codes. |
Function | normalize_currency |
Returns the normalized sting of any currency code. |
Function | parse_grouping |
Parse primary and secondary digit grouping |
Function | parse_pattern |
Parse number format patterns |
Function | validate_currency |
Check the currency code is recognized by Babel. |
Return formatted currency value.
>>> format_currency(1099.98, 'USD', locale='en_US') u'$1,099.98' >>> format_currency(1099.98, 'USD', locale='es_CO') u'US$\xa01.099,98' >>> format_currency(1099.98, 'EUR', locale='de_DE') u'1.099,98\xa0\u20ac'
The format can also be specified explicitly. The currency is placed with the '¤' sign. As the sign gets repeated the format expands (¤ being the symbol, ¤¤ is the currency abbreviation and ¤¤¤ is the full name of the currency):
>>> format_currency(1099.98, 'EUR', u'¤¤ #,##0.00', locale='en_US') u'EUR 1,099.98' >>> format_currency(1099.98, 'EUR', u'#,##0.00 ¤¤¤', locale='en_US') u'1,099.98 euros'
Currencies usually have a specific number of decimal digits. This function favours that information over the given format:
>>> format_currency(1099.98, 'JPY', locale='en_US') u'\xa51,100' >>> format_currency(1099.98, 'COP', u'#,##0.00', locale='es_ES') u'1.099,98'
However, the number of decimal digits can be overriden from the currency information, by setting the last parameter to False:
>>> format_currency(1099.98, 'JPY', locale='en_US', currency_digits=False) u'\xa51,099.98' >>> format_currency(1099.98, 'COP', u'#,##0.00', locale='es_ES', currency_digits=False) u'1.099,98'
If a format is not specified the type of currency format to use from the locale can be specified:
>>> format_currency(1099.98, 'EUR', locale='en_US', format_type='standard') u'\u20ac1,099.98'
When the given currency format type is not available, an exception is raised:
>>> format_currency('1099.98', 'EUR', locale='root', format_type='unknown') Traceback (most recent call last): ... UnknownCurrencyFormatError: "'unknown' is not a known currency format type"
>>> format_currency(101299.98, 'USD', locale='en_US', group_separator=False) u'$101299.98'
>>> format_currency(101299.98, 'USD', locale='en_US', group_separator=True) u'$101,299.98'
You can also pass format_type='name' to use long display names. The order of the number and currency name, along with the correct localized plural form of the currency name, is chosen according to locale:
>>> format_currency(1, 'USD', locale='en_US', format_type='name') u'1.00 US dollar' >>> format_currency(1099.98, 'USD', locale='en_US', format_type='name') u'1,099.98 US dollars' >>> format_currency(1099.98, 'USD', locale='ee', format_type='name') u'us ga dollar 1,099.98'
By default the locale is allowed to truncate and round a high-precision
number by forcing its format pattern onto the decimal part. You can bypass
this behavior with the decimal_quantization
parameter:
>>> format_currency(1099.9876, 'USD', locale='en_US') u'$1,099.99' >>> format_currency(1099.9876, 'USD', locale='en_US', decimal_quantization=False) u'$1,099.9876'
Parameters | |
number | the number to format |
currency | the currency code |
format | the format string to use |
locale | the Locale object or locale identifier |
currency_digits | use the currency's natural number of decimal digits |
format_type | the currency format type to use |
decimal_quantization | Truncate and round high-precision numbers to
the format pattern. Defaults to True . |
group_separator | Boolean to switch group separator on/off in a locale's number format. |
Return the given decimal number formatted for a specific locale.
>>> format_decimal(1.2345, locale='en_US') u'1.234' >>> format_decimal(1.2346, locale='en_US') u'1.235' >>> format_decimal(-1.2346, locale='en_US') u'-1.235' >>> format_decimal(1.2345, locale='sv_SE') u'1,234' >>> format_decimal(1.2345, locale='de') u'1,234'
The appropriate thousands grouping and the decimal separator are used for each locale:
>>> format_decimal(12345.5, locale='en_US') u'12,345.5'
By default the locale is allowed to truncate and round a high-precision
number by forcing its format pattern onto the decimal part. You can bypass
this behavior with the decimal_quantization
parameter:
>>> format_decimal(1.2346, locale='en_US') u'1.235' >>> format_decimal(1.2346, locale='en_US', decimal_quantization=False) u'1.2346' >>> format_decimal(12345.67, locale='fr_CA', group_separator=False) u'12345,67' >>> format_decimal(12345.67, locale='en_US', group_separator=True) u'12,345.67'
Parameters | |
number | the number to format |
format | |
locale | the Locale object or locale identifier |
decimal_quantization | Truncate and round high-precision numbers to
the format pattern. Defaults to True . |
group_separator | Boolean to switch group separator on/off in a locale's number format. |
Return the given number formatted for a specific locale.
>>> format_number(1099, locale='en_US') u'1,099' >>> format_number(1099, locale='de_DE') u'1.099'
Parameters | |
number | the number to format |
locale | the Locale object or locale identifier |
Return formatted percent value for a specific locale.
>>> format_percent(0.34, locale='en_US') u'34%' >>> format_percent(25.1234, locale='en_US') u'2,512%' >>> format_percent(25.1234, locale='sv_SE') u'2\xa0512\xa0%'
The format pattern can also be specified explicitly:
>>> format_percent(25.1234, u'#,##0‰', locale='en_US') u'25,123‰'
By default the locale is allowed to truncate and round a high-precision
number by forcing its format pattern onto the decimal part. You can bypass
this behavior with the decimal_quantization
parameter:
>>> format_percent(23.9876, locale='en_US') u'2,399%' >>> format_percent(23.9876, locale='en_US', decimal_quantization=False) u'2,398.76%'
>>> format_percent(229291.1234, locale='pt_BR', group_separator=False) u'22929112%'
>>> format_percent(229291.1234, locale='pt_BR', group_separator=True) u'22.929.112%'
Parameters | |
number | the percent number to format |
format | |
locale | the Locale object or locale identifier |
decimal_quantization | Truncate and round high-precision numbers to
the format pattern. Defaults to True . |
group_separator | Boolean to switch group separator on/off in a locale's number format. |
Return value formatted in scientific notation for a specific locale.
>>> format_scientific(10000, locale='en_US') u'1E4'
The format pattern can also be specified explicitly:
>>> format_scientific(1234567, u'##0.##E00', locale='en_US') u'1.23E06'
By default the locale is allowed to truncate and round a high-precision
number by forcing its format pattern onto the decimal part. You can bypass
this behavior with the decimal_quantization
parameter:
>>> format_scientific(1234.9876, u'#.##E0', locale='en_US') u'1.23E3' >>> format_scientific(1234.9876, u'#.##E0', locale='en_US', decimal_quantization=False) u'1.2349876E3'
Parameters | |
number | the number to format |
format | |
locale | the Locale object or locale identifier |
decimal_quantization | Truncate and round high-precision numbers to
the format pattern. Defaults to True . |
Return the name used by the locale for the specified currency.
>>> get_currency_name('USD', locale='en_US') u'US Dollar'
Parameters | |
currency | the currency code. |
count | the optional count. If provided the currency name will be pluralized to that number if possible. |
locale | the Locale object or locale identifier. |
Return the symbol used by the locale for the specified currency.
>>> get_currency_symbol('USD', locale='en_US') u'$'
Parameters | |
currency | the currency code. |
locale | the Locale object or locale identifier. |
Return the unit pattern used for long display of a currency value for a given locale. This is a string containing {0} where the numeric part should be substituted and {1} where the currency long display name should be substituted.
>>> get_currency_unit_pattern('USD', locale='en_US', count=10) u'{0} {1}'
Parameters | |
currency | the currency code. |
count | the optional count. If provided the unit pattern for that number will be returned. |
locale | the Locale object or locale identifier. |
Return the symbol used by the locale to separate decimal fractions.
>>> get_decimal_symbol('en_US') u'.'
Parameters | |
locale | the Locale object or locale identifier |
Return the plus sign symbol used by the current locale.
>>> get_minus_sign_symbol('en_US') u'-'
Parameters | |
locale | the Locale object or locale identifier |
Return the plus sign symbol used by the current locale.
>>> get_plus_sign_symbol('en_US') u'+'
Parameters | |
locale | the Locale object or locale identifier |
Returns the list of currencies for the given territory that are valid for the given date range. In addition to that the currency database distinguishes between tender and non-tender currencies. By default only tender currencies are returned.
The return value is a list of all currencies roughly ordered by the time of when the currency became active. The longer the currency is being in use the more to the left of the list it will be.
The start date defaults to today. If no end date is given it will be the same as the start date. Otherwise a range can be defined. For instance this can be used to find the currencies in use in Austria between 1995 and 2011:
>>> from datetime import date >>> get_territory_currencies('AT', date(1995, 1, 1), date(2011, 1, 1)) ['ATS', 'EUR']
Likewise it's also possible to find all the currencies in use on a single date:
>>> get_territory_currencies('AT', date(1995, 1, 1)) ['ATS'] >>> get_territory_currencies('AT', date(2011, 1, 1)) ['EUR']
By default the return value only includes tender currencies. This however can be changed:
>>> get_territory_currencies('US') ['USD'] >>> get_territory_currencies('US', tender=False, non_tender=True, ... start_date=date(2014, 1, 1)) ['USN', 'USS']
Parameters | |
territory | the name of the territory to find the currency for. |
start_date | the start date. If not given today is assumed. |
end_date | the end date. If not given the start date is assumed. |
tender | controls whether tender currencies should be included. |
non_tender | controls whether non-tender currencies should be included. |
include_details | if set to True , instead of returning currency
codes the return value will be dictionaries
with detail information. In that case each
dictionary will have the keys 'currency',
'from', 'to', and 'tender'. |
Parse localized decimal string into a decimal.
>>> parse_decimal('1,099.98', locale='en_US') Decimal('1099.98') >>> parse_decimal('1.099,98', locale='de') Decimal('1099.98') >>> parse_decimal('12 345,123', locale='ru') Decimal('12345.123')
When the given string cannot be parsed, an exception is raised:
>>> parse_decimal('2,109,998', locale='de') Traceback (most recent call last): ... NumberFormatError: '2,109,998' is not a valid decimal number
If strict
is set to True
and the given string contains a number
formatted in an irregular way, an exception is raised:
>>> parse_decimal('30.00', locale='de', strict=True) Traceback (most recent call last): ... NumberFormatError: '30.00' is not a properly formatted decimal number. Did you mean '3.000'? Or maybe '30,00'?
>>> parse_decimal('0.00', locale='de', strict=True) Traceback (most recent call last): ... NumberFormatError: '0.00' is not a properly formatted decimal number. Did you mean '0'?
Parameters | |
string | the string to parse |
locale | the Locale object or locale identifier |
strict | controls whether numbers formatted in a weird way are accepted or rejected |
Raises | |
NumberFormatError | if the string can not be converted to a decimal number |
Parse localized number string into an integer.
>>> parse_number('1,099', locale='en_US') 1099 >>> parse_number('1.099', locale='de_DE') 1099
When the given string cannot be parsed, an exception is raised:
>>> parse_number('1.099,98', locale='de') Traceback (most recent call last): ... NumberFormatError: '1.099,98' is not a valid number
Parameters | |
string | the string to parse |
locale | the Locale object or locale identifier |
Returns | |
the parsed number | |
Raises | |
NumberFormatError | if the string can not be converted to a number |
Undocumented
Return currency's precision.
Precision is the number of decimals found after the decimal point in the currency's format pattern.
Parameters | |
currency | the currency code. |
Return maximum precision of a decimal instance's fractional part.
Precision is extracted from the fractional part only.
Return the symbol used by the locale to separate mantissa and exponent.
>>> get_exponential_symbol('en_US') u'E'
Parameters | |
locale | the Locale object or locale identifier |
Return the symbol used by the locale to separate groups of thousands.
>>> get_group_symbol('en_US') u','
Parameters | |
locale | the Locale object or locale identifier |
Returns True
only if a currency is recognized by Babel.
This method always return a Boolean and never raise.
Return a set
of normalized currency codes.
Parameters | |
locale | filters returned currency codes by the provided locale. Expected to be a locale instance or code. If no locale is provided, returns the list of all currencies from all locales. |
Returns the normalized sting of any currency code.
Accepts a locale parameter for fined-grained validation, working as the one defined above in list_currencies() method.
Returns None if the currency is unknown to Babel.
Parse primary and secondary digit grouping
>>> parse_grouping('##') (1000, 1000) >>> parse_grouping('#,###') (3, 3) >>> parse_grouping('#,####,###') (3, 4)
Check the currency code is recognized by Babel.
Accepts a locale parameter for fined-grained validation, working as the one defined above in list_currencies() method.
Raises a UnknownCurrencyError
exception if the currency is unknown to Babel.