view doc/numbers.txt @ 154:4d2117dfd7f5

The default ordering of messages in generated POT files, which is based on the order those messages are found when walking the source tree, is no longer subject to differences between platforms; directory and file names are now always sorted alphabetically.
author cmlenz
date Wed, 20 Jun 2007 21:41:00 +0000
parents bf1bcdf19111
children 00b83943f79e
line wrap: on
line source
.. -*- mode: rst; encoding: utf-8 -*-

==========================
Number Formatting
==========================


.. contents:: Contents
   :depth: 2
.. sectnum::


Support for locale-specific formatting and parsing of numbers is provided by
the ``babel.numbers`` module:

.. code-block:: pycon

    >>> from babel.numbers import format_number, format_decimal, format_percent

Examples:

.. code-block:: pycon

    >>> format_decimal(1.2345, locale='en_US')
    u'1.234'
    >>> format_decimal(1.2345, locale='sv_SE')
    u'1,234'
    >>> format_decimal(12345, locale='de_DE')
    u'12.345'


Pattern Syntax
==============

While Babel makes it simple to use the appropriate number format for a given
locale, you can also force it to use custom patterns. As with date/time
formatting patterns, the patterns Babel supports for number formatting are
based on the `Locale Data Markup Language specification`_ (LDML).

Examples:

.. code-block:: pycon

    >>> format_decimal(-1.2345, format='#,##0.##;-#', locale='en')
    u'-1.23'
    >>> format_decimal(-1.2345, format='#,##0.##;(#)', locale='en')
    u'(1.23)'

The syntax for custom number format patterns is described in detail in the
the specification. The following table is just a relatively brief overview.

 .. _`Locale Data Markup Language specification`: http://unicode.org/reports/tr35/#Number_Format_Patterns

  +----------+-----------------------------------------------------------------+
  | Symbol   | Description                                                     |
  +==========+=================================================================+
  | ``0``    | Digit                                                           |
  +----------+-----------------------------------------------------------------+
  | ``1-9``  | '1' through '9' indicate rounding.                              |
  +----------+-----------------------------------------------------------------+
  | ``@``    | Significant digit                                               |
  +----------+-----------------------------------------------------------------+
  | ``#``    | Digit, zero shows as absent                                     |
  +----------+-----------------------------------------------------------------+
  | ``.``    | Decimal separator or monetary decimal separator                 |
  +----------+-----------------------------------------------------------------+
  | ``-``    | Minus sign                                                      |
  +----------+-----------------------------------------------------------------+
  | ``,``    | Grouping separator                                              |
  +----------+-----------------------------------------------------------------+
  | ``E``    | Separates mantissa and exponent in scientific notation          |
  +----------+-----------------------------------------------------------------+
  | ``+``    | Prefix positive exponents with localized plus sign              |
  +----------+-----------------------------------------------------------------+
  | ``;``    | Separates positive and negative subpatterns                     |
  +----------+-----------------------------------------------------------------+
  | ``%``    | Multiply by 100 and show as percentage                          |
  +----------+-----------------------------------------------------------------+
  | ``‰``    | Multiply by 1000 and show as per mille                          |
  +----------+-----------------------------------------------------------------+
  | ``¤``    | Currency sign, replaced by currency symbol. If doubled,         |
  |          | replaced by international currency symbol. If tripled, uses the |
  |          | long form of the decimal symbol.                                |
  +----------+-----------------------------------------------------------------+
  | ``'``    | Used to quote special characters in a prefix or suffix          |
  +----------+-----------------------------------------------------------------+
  | ``*``    | Pad escape, precedes pad character                              |
  +----------+-----------------------------------------------------------------+


Parsing Numbers
===============

Babel can also parse numeric data in a locale-sensitive manner:

.. code-block:: pycon

    >>> from babel.numbers import parse_decimal, parse_number

Examples:

.. code-block:: pycon

    >>> parse_decimal('1,099.98', locale='en_US')
    1099.98
    >>> parse_decimal('1.099,98', locale='de')
    1099.98
    >>> parse_decimal('2,109,998', locale='de')
    Traceback (most recent call last):
      ...
    NumberFormatError: '2,109,998' is not a valid decimal number
Copyright (C) 2012-2017 Edgewall Software