🇨🇭

Switzerland Number Format

CLDR Locale:
ISO: CH / CHERegion: EuropeDigits: western

Try It — Live Preview

Number
1'234'567.89
Currency (CHF)
CHF 1'234'567.89
Percentage
1'234'568%
Compact
1.2 Mio.

Format Rules

Decimal Separator
.period
Thousands Separator
'apostrophe
Grouping Pattern
3
Negative Format
-1'234'567.89
Currency Symbol
CHF (CHF)
Currency Position
Before number with space → CHF 1'234'567.89
Percent Position
After number → 13%
Zero
0.00
Compact
1.2 Mio.

Switzerland formatting implementation notes

For Switzerland, format numbers with the explicit locale de-CH; the reference value 1234567.89 renders as 1'234'567.89.

Switzerland's reference format uses "." as the decimal mark and apostrophe ("'") for grouping. The integer uses repeating groups of three digits. Pass "de-CH" directly to Intl.NumberFormat instead of replacing punctuation in a preformatted string.

CHF is shown with CHF before the amount with a separating space; the same reference value renders as CHF 1'234'567.89. The percent sign appears immediately after the amount. Use the ISO currency code for storage and interchange because a visible symbol can be shared by unrelated currencies.

Western 0–9 digits are the page's reference digit system, and the negative pattern is -n. This country is multilingual in software contexts: also test fr-CH, it-CH, because language selection can change spacing, punctuation, and currency display without changing the region. Validate output with formatToParts() when spacing, signs, or bidirectional literals affect the interface.

  • Locale: de-CH
  • Decimal and grouping: 1'234'567.89
  • Currency: CHF → CHF 1'234'567.89
  • Digits: Western 0–9 digits

Reviewed 19 July 2026. Sources: Unicode locale number formats · Intl.NumberFormat reference

What's different here

  • Thousands are grouped with an ASCII apostrophe (') (en-US uses a comma (,)).
  • The currency symbol goes before the amount with a space (en-US: immediately before the amount).
  • No other page in this directory shares this exact number pattern.
  • Nearby differences: United Kingdom (en-GB) groups with a comma (,) instead of an ASCII apostrophe (') and places the currency symbol immediately before the amount; Netherlands (nl-NL) uses a comma (,) as the decimal mark instead of a period (.) and groups with a period (.) instead of an ASCII apostrophe ('); Ireland (en-IE) groups with a comma (,) instead of an ASCII apostrophe (') and places the currency symbol immediately before the amount; Malta (mt-MT) groups with a comma (,) instead of an ASCII apostrophe (') and places the currency symbol immediately before the amount.
  • Currency: CHF has ISO minor unit 2.
  • Postal address order: name → building → street + street number → postcode + city → country. See address formats.

Reference value 1234567.89 in each locale

LocaleOutput
de-CH1'234'567.89
fr-CH1'234'567,89
it-CH1'234'567.89

Rendered with the platform's CLDR data at build time.

Swiss number format

Swiss German (de-CH) and Swiss Italian (it-CH) write 1234567.89 as 1'234'567.89: an apostrophe between thousands and a period for decimals, the opposite of Germany. Swiss French (fr-CH) uses the same apostrophe but a comma for decimals: 1'234'567,89. Current CLDR data (version 48 and later) uses the plain apostrophe U+0027. Older runtimes print the curly U+2019, so never hard-code either one.

Read the apostrophe from the locale

const groupChar = (locale) =>
  new Intl.NumberFormat(locale).formatToParts(1234567).find(p => p.type === 'group').value;

groupChar('de-CH') === "'";  // → true
groupChar('fr-CH') === "'";  // → true
groupChar('it-CH') === "'";  // → true

On a CLDR 46/47 runtime (for example Node 20), the first and third lines return false (U+2019), and fr-CH returns U+202F. For typed input, accept every form:

const parseSwiss = (input, decimal) =>
  Number(input.replace(/['\u2019\u202F\u00A0 ]/g, '').replace(decimal, '.'));

parseSwiss("1'234'567.89", '.'); // → 1234567.89
parseSwiss("1’234’567.89", '.'); // → 1234567.89
parseSwiss("1'234'567,89", ','); // → 1234567.89

Pass '.' for de-CH and it-CH. For fr-CH, pass ',' for plain numbers and '.' for CHF amounts (see below).

CHF amounts in de-CH, fr-CH and it-CH

new Intl.NumberFormat('de-CH', { style: 'currency', currency: 'CHF' }).format(1234567.89);
// → "CHF 1'234'567.89"
new Intl.NumberFormat('fr-CH', { style: 'currency', currency: 'CHF' }).format(1234567.89);
// → "1'234'567.89 CHF"
new Intl.NumberFormat('it-CH', { style: 'currency', currency: 'CHF' }).format(1234567.89);
// → "CHF 1'234'567.89"
new Intl.NumberFormat('de-CH', { style: 'currency', currency: 'CHF', currencySign: 'accounting' }).format(-999.5);
// → "CHF-999.50"
new Intl.NumberFormat('fr-CH', { style: 'currency', currency: 'CHF', currencySign: 'accounting' }).format(-999.5);
// → "(999.50 CHF)"
de-CHfr-CHit-CH
CHF amountCHF 1'234'567.891'234'567.89 CHFCHF 1'234'567.89
Decimal mark in CHF amounts.. (plain numbers: ,).
Negative, accountingCHF-999.50(999.50 CHF)CHF-999.50
Percent (0.13)13%13%13%
Compact (1234567)1.2 Mio.1,2 M1.2 Mln

Two things catch people out:

  • fr-CH switches decimal marks. Plain numbers use a comma, CHF amounts use a period. That's CLDR data (currencyDecimal in fr_CH.xml), not a typo. Format money with style: 'currency'; don't format a number and glue "CHF" on.
  • Accounting negatives differ: parentheses in fr-CH, a minus after the code in de-CH and it-CH.

CHF in data

CHF is the ISO 4217 code for the Swiss franc (numeric 756, minor unit 2), used in Switzerland and Liechtenstein. Intl displays it as CHF in all three Swiss locales. Store CHF with every amount.

Coins. The smallest coin in circulation is 5 centimes. The 1-centime coin was withdrawn on 1 January 2007 (Swiss National Bank).

Q&A

What is the Swiss thousands separator?

An apostrophe in de-CH, fr-CH and it-CH. Current CLDR uses U+0027 ('); runtimes on older CLDR data print U+2019 (’), and U+202F for fr-CH. Read it from formatToParts().

Does Switzerland use a comma or a period for decimals?

A period in de-CH and it-CH. fr-CH uses a comma for plain numbers but a period in CHF amounts.

Is it CHF or Fr.?

For formatted output, CHF. That's what Intl prints in every Swiss locale, and it's the ISO code you should store.

Which locales should a Swiss product support?

At least de-CH, fr-CH and it-CH, the three this page covers.

Code Examples

// Basic number
new Intl.NumberFormat('de-CH').format(1234567.89)
// → "1'234'567.89"

// Currency
new Intl.NumberFormat('de-CH', {
  style: 'currency',
  currency: 'CHF'
}).format(1234567.89)
// → "CHF 1'234'567.89"

// Percentage
new Intl.NumberFormat('de-CH', {
  style: 'percent',
  minimumFractionDigits: 1
}).format(0.125)

// Compact notation
new Intl.NumberFormat('de-CH', {
  notation: 'compact'
}).format(1234567)

Negative Number Formats

Standard-1'234'567.89
new Intl.NumberFormat('de-CH').format(-1234567.89)
Accounting styleCHF-1'234'567.89
new Intl.NumberFormat('de-CH', { style: 'currency', currency: 'CHF', currencySign: 'accounting' }).format(-1234567.89)

Edge Cases & Notes

Apostrophe as thousands separator (U+0027 in CLDR 48 and later; older runtimes print U+2019, so read it from formatToParts()). Decimal uses period — opposite of neighboring Germany.