Number and currency patterns

Number formats introduction

Pre-requisite topics to read: Numbers are formatted using patterns, like "#,###.00". For example, the pattern "#,###.00" when used to format the number 12345.678 could result in "12'345,67" if the grouping separator for your locale use an apostrophe ('), and the decimal separator is a comma (,).
Whenever any of these symbols are in the English pattern, they must be retained in the pattern for your locale. The positions of some of them (%, ¤) may be changed, or spaces added or removed. The symbols will be replaced by the local equivalents, using the Number Symbols for your language. (See 💡 Helpful Tips below the table)

Type Example pattern Meaning
. #,##0.00 The decimal separator placeholder. In a computer program, this gets replaced automatically by the actual symbol used for the decimal point in your locale. Not a real period; must be retained!
 ,
        #,##0.00

The grouping (thousand) separator placeholder. In a computer program, this gets automatically replaced by the actual grouping separator in your language. Not a real comma; must be retained!
0

#,##0.###

The placeholder for the start of a whole number. In a computer program, this gets replace by an actual digit (or a zero if there aren't enough digits). Not a real zero(digit); must be retained!
#

#,##0.###

The # symbols are place holders for placements of digits based on positions of digit separator. In a computer program, these would be replaced by actual digits. The main use of # is to show the placement of the "," (grouping separator).
¤

¤#,##0.00

#,##0.00¤

The currency symbol placeholder. This placeholder indicates the position of the currency symbol (or currency code) and the beginning of the number #. In a  computer program, this will be replaced by a currency symbol (e.g $) or code (e.g. USD).  By CLDR default, a space gets added automatically depending on rules as defined in the spec TR35 Currency This space handling would be seen in a computer program ONLY when applicable as per the spec. 
See 💡 Translation Tips below on when to add spacing  ¤ #,##0.### and not ¤#,##0.###
%

#,##0%

This marks a percent format. The position of the % symbol would be locale specific and may appear in the front, back, with or without spacing.
Not a real %; must be retained!
E

#E0

his marks a scientific format. The E symbol may change position. Must be retained.
'

See German example: 


If any of the above characters are used as literal characters, they must be quoted with ASCII single quotes. This is mostly used in Compact Number formatting with abbreviations.
For example, in a Short Numbers if a period needs to be used to mark an abbreviation, it would appear as:
0.0 tis'.'
not
0.0 tis.
...;... #,##0.###;#,##0.###-
 
#,##0.00¤;(#,##0.00¤)

#,##0
%;#,##0-%.  
If your language expresses negative numbers in a format other than adding "-" at the front, you can put in two patterns, separated by a semicolon with no space. 
  • The first format before the ";" will be used to indicate the formatting for zero and positive values.
  • The second format after the ";" will be used to indicate the formatting for negative values.
  • For accounting-currency, a "-" is not required to indicate the negative pattern. 
Also see 💡 Translation Tips below

💡 Translation Tips
  • If your locale grouping separation is not by thousands, then move the comma separator in the format to the correct placement.
    For example, if your language expects to see the separator in the first group of 3 and 2s there after: 1,00,00,000.00, the pattern should reflect that: #,##,##0.###.
  • DO NOT "translate" the placeholder characters #,###.00. For example: 
    • Do not change '.' to ',' even though in your language the decimal point is written with a comma.
    • Do not change the zero (0) or hash marks (#) after a decimal point (for example, #,##0.###); those will be reset by computer programs. 
    • Even if your currency doesn't use any decimal points, do not remove the decimal indicators (for example, ¤#,##0.00).
  •  Negative patterns can be handled two ways:
    • If the negative pattern is the same as the positive pattern with a minus sign in front (e.g. -1,234,00), then that negative pattern will be automatically generated. 
      • You don't need to supply a negative pattern in that case, and if you do supply one it will be automatically removed.
      • Do not specify a negative pattern and leave just the one pattern as #,##0.### if the negative pattern in your locale is same as the positive but with negative sign in front (e.g. -1,234,00). A minus sign will be added automatically to the positive format to form the negative pattern in your locale.
    • If your locale uses a different way to express the negative number (other than a negative sign in front), then use the ";" to provide two patterns. The semicolon after the positive pattern indicates a separate format for the negative pattern. 
      • For example, in an Accounting currency format, if your locale uses ( )  to express the negative number, specify the negative number with ";", such as #,##0.00¤;(#,##0.00¤). This example format indicates that the negative currencies appear like "(1'234,56£)" instead of "-1'234,56£".  
      • For example, if the position of the negative sign is before the % symbol, you'd specify:  #,##0%;#,##0-%.
  • Move the the currency symbol (¤) or percent sign (%), if it is used in a different position.
  • To deal with CLDR's default automatic space handling in place for currency symbol when using a currency code(e.g. USD):
    • Do NOT add a space ¤#,##0.### for result: $12 and USD 12.
    • ADD a manual space ¤ #,##0.### for result: $ 12 and USD 12.
  • Always verify with examples in the right information pane and see how the data from number symbols are used in formatting numbers. The final results of the number formatting will show the correct symbols for decimal, grouping, etc... from Number Symbols in your locale.

Types of Number Patterns

There are four general-purpose number patterns supported in CLDR: decimal, currency, percent, and scientific.

Remember that the "." and "," are placeholders and do not mean the literal characters: computer programs that use CLDR will change them to the right number symbols for your language as explained in the section above.


Type English Example Meaning
Currency ¤#,##0.00 Used for currency values. The currency symbol (¤) is will be replaced by the appropriate currency symbol for whatever currency is being formatted. The choice of whether to use the international currency symbols (USD, EUR, JAY, RUB,…) or localized symbols ($, , ¥, руб.,…) is up to the application program that uses CLDR. Note: the number of decimals will be set by programs that use CLDR to whatever is appropriate for the currency, so do not change them; Keep exactly 2 decimals in place.
currency-accounting  ¤#,##0.00;(¤#,##0.00) Used for currency formats in accounting contexts.
Decimal

#,##0.###

Used for formatting general decimal numbers. The number of decimals will be set by programs that use CLDR, so don't alter them. Typically the only change needed for this format is to the position of the thousands separator (see above 💡 Translation Tips).
Percent

#,##0%

Used for percent values, such as 12%. The number of decimals will be set by programs that use CLDR, so don't alter them.
Scientific

#E0

Used for scientific notation. Typically not translated.


Miscellaneous Number Patterns

Code

example

Meaning

approximately ~{0}

Used to indicate a number that is not exact represented by the placeholder {0}. This is used when an exact number is not required, like for example, to indicate the number of people who have commented on an article.

At least

{0}+

Used to indicate a number that falls within a range with a known minimum, represented by the placeholder {0}. This is used when an exact number is not required, like for example, to indicate the number of people who have commented on an article.

At most ≤{0}

Used to indicate a number that falls within a range with a known maxium, represented by the placeholder {0}. This is used when an exact number is not required, like for example, to indicate the number of people who have commented on an article.

Range

{0}–{1}

Used to indicate a range of numbers


Compact decimal formatting

There are also patterns for compact forms of numbers, such as the such as "1M" and "1 million". These patterns may be substantially different across languages, as shown by comparing the English patterns to the Japanese patterns in the table below. These patterns also have plural categories.

Code Meaning English
Pattern
English
Formatted
Example
Japanese
Pattern
Japanese
Formatted
Example
4-digit-short-one
(1000)

1 thousand = 1,000 0K
1K

0 1
5-digit-short-one
(10000)
10,000 00K 12K 0万
1万
6-digit-short-one (100000) 100,000 000K 123K 00万 12万
7-digit-short-one
(1000000)
1,000,000 0.0M 1.2M 000万 123万
8-digit-short-one
(10000000)
10,000,000 00M 12M 0000万 1234万
9-digit-short-one
(100000000)
100,000,000 000M 123M 0億
1
10-digit-short-one (1000000000) 1,000,000,000 0B
1B
00億 12億
11-digit-short-one (10000000000) 10,000,000,000 00B 12B 000億 123億
12-digit-short-one (100000000000) 100,000,000,000 000B 123B 0000億 1234億
13-digit-short-one
(1000000000000)
1,000,000,000,000 0T
1T

0兆

1兆

14-digit-short-one
(10000000000000)
10,000,000,000,000   00T 12T 00兆 12兆
15-digit-short-one
(100000000000000)
100,000,000,000,000 000T 123T 000兆 123兆

When computer programs use CLDR, the number of decimals can be changed by computer programs according to the task its designed for. For example, the pattern for 10,000 in the table below (00K for English, 0万 for Japanese) may be modified to have more or fewer decimals — it could be changed to have 3 digits of accuracy: 00.0K for English, 0.00万 for Japanese.

💡 Translation Tips
  • If it is impossible to abbreviate numbers in that way (e.g. 1M) in your language, then use a single 0 (zero digit) in your result. For example, the Japanese pattern for 1000 uses a zero digit because 1,000 is expressed with the character 千. This should be avoided wherever possible, however, since it may cause display issues on devices with small screens, such as mobile phones.
  • In some languages the text will inflect according to the number. For example, languages that writes "1 million" but "2 millions".
  • The patterns do not allow for gender or case inflection, so use the most neutral form.
  • Remember that these are number patterns, so literal characters like a period (".") must occur within quotation marks if they are not the placeholder standing for the decimal period. See Pattern Characters.
  • Compact decimal patterns do not require a "0" when there is a single word or a symbol that is unique. represents a 1,000. For example, in Hebrew and Somali, 4-digit-short-one gets formatted to a single word or symbol, without an extra digit. In a Somali example,1000 would be formatted to "Kun" and not "0 Kun" (in Somali, you would express 1000 as "Kun" not "1 Kun").
    • However, this can only be done where the number is unique. For example, in French 4-digit-short-one (1000) is used to format not only 1K, but also 1.1K. If you supply a pattern with no digits, the user can't tell what the number is suppose to be. An error will occur if you try to do this.
    • There is a mechanism for special cases of exact matches. A special row can be added for your language for specific numbers, such as exactly 1, where the digits must be omitted. You would see a Code value of 4-digit-short-one, for example. If your language has such cases, please file a ticket to request adding them.
  • Different patterns are required for currency and non-currency. Please add both.

Plural Forms of Numbers

Some languages have multiple plural forms for numbers, and will have multiple plural categories for each number. See Plural Rules and Tool for numbers mapped to the various plural categories. 
X digit-one
X digit-two
Xdigit-other
Comments