Sweden Number Format
Try It — Live Preview
Format Rules
Sweden formatting implementation notes
For Sweden, format numbers with the explicit locale sv-SE; the reference value 1234567.89 renders as 1 234 567,89.
Sweden's reference format uses "," as the decimal mark and a non-breaking space (U+00A0) for grouping. The integer uses repeating groups of three digits. Pass "sv-SE" directly to Intl.NumberFormat instead of replacing punctuation in a preformatted string.
SEK is shown with kr after the amount with a separating space; the same reference value renders as 1 234 567,89 kr. The percent sign appears after the amount with a separating space. 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. Treat sv-SE as the reference locale for this page, but still respect the user's explicitly selected language and numbering-system preferences. Validate output with formatToParts() when spacing, signs, or bidirectional literals affect the interface.
- Locale: sv-SE
- Decimal and grouping: 1 234 567,89
- Currency: SEK → 1 234 567,89 kr
- Digits: Western 0–9 digits
Reviewed 19 July 2026. Sources: Unicode locale number formats · Intl.NumberFormat reference
What's different here
- Decimal mark is a comma (,) (en-US uses a period (.)).
- Thousands are grouped with a no-break space (U+00A0) (en-US uses a comma (,)).
- The currency symbol goes after the amount with a space (en-US: immediately before the amount).
- The percent sign goes after the number with a space (en-US: immediately after the number).
- The negative pattern is −n (en-US: -n).
- Uses the same number pattern (decimal mark, grouping, symbol and percent placement) as Norway.
- Nearby differences: Germany (de-DE) groups with a period (.) instead of a no-break space (U+00A0); France (fr-FR) groups with a narrow no-break space (U+202F) instead of a no-break space (U+00A0); Belgium (fr-BE) groups with a narrow no-break space (U+202F) instead of a no-break space (U+00A0); Austria (de-AT) places the currency symbol before the amount with a space.
- Currency: SEK has ISO minor unit 2. The symbol kr is also used by NOK in this directory.
- The grouping character is a no-break space (U+00A0), not a regular space. Normalise it before parsing user input or comparing strings.
- Postal address order: name → building → street + street number → postcode + city → country. See address formats.
Swedish number format
Swedish (sv-SE) writes 1234567.89 as 1 234 567,89: a comma for decimals and a space between thousands. Amounts in kronor put kr after the number: 1 234 567,89 kr. Every one of those spaces is U+00A0 NO-BREAK SPACE, both in Intl output and in CLDR's Swedish data, and negative numbers start with U+2212 MINUS SIGN, not the hyphen you type. Percentages get the same no-break space: 13 %.
Sweden vs Poland, Norway and Denmark
Intl output (the same on Node 20 and Node 24):
| sv-SE | pl-PL | nb-NO | da-DK | |
|---|---|---|---|---|
| 1234567.89 | 1 234 567,89 | 1 234 567,89 | 1 234 567,89 | 1.234.567,89 |
| 1234 | 1 234 | 1234 | 1 234 | 1.234 |
| −1234.5 | −1 234,5 (U+2212) | -1234,5 (U+002D) | −1 234,5 (U+2212) | -1.234,5 (U+002D) |
| Percent (0.13) | 13 % | 13% | 13 % | 13 % |
| Currency | 1 234 567,89 kr | 1 234 567,89 zł | 1 234 567,89 kr | 1.234.567,89 kr. |
| Compact (1234567) | 1,2 mn | 1,2 mln | 1,2 mill. | 1,2 mio. |
| Short date (27 Sep 2026) | 2026-09-27 | 27.09.2026 | 27.09.2026 | 27.09.2026 |
- Poland matches Sweden on large numbers only. pl-PL leaves four-digit numbers ungrouped (CLDR sets
minimumGroupingDigitsto 2 for Polish), uses the ASCII hyphen for negatives and puts no space before%. Sweden writes short dates year first. - Norway shares Sweden's punctuation, minus sign, percent spacing and
krafter the amount. The compact words differ (mill., notmn), short dates put the day first, andkralone doesn't say whether an amount is SEK or NOK. - Denmark groups with a period, uses the ASCII hyphen for negatives, and writes
kr.with a full stop after the amount.
Parsing Swedish input
parseFloat stops at the first space, and it can't read the U+2212 minus that Intl itself produces:
parseFloat("1 234,56"); // → 1
const s = new Intl.NumberFormat('sv-SE').format(-1234.5);
s; // → "−1 234,5"
parseFloat(s); // → NaNNormalise the spaces and the minus sign, then swap the decimal comma:
const parseSv = input => {
const s = input.replace(/[\u0020\u00A0\u202F]/g, '').replace(/\u2212/g, '-').replace(',', '.');
return s === '' ? NaN : Number(s);
};
parseSv("−1 234,5"); // → -1234.5
parseSv("1 234,56"); // → 1234.56
parseSv("1 234,56"); // → 1234.56
parseSv(" "); // → NaNThe second call is typed with ordinary spaces (U+0020). The third uses U+202F, the narrow no-break space that fr-FR output and some tools produce. Accept all three. The guard makes blank input NaN; Number('') alone returns 0.
SEK amounts and öre rounding
SEK keeps two decimals in data and in Intl output (1 234,50 kr). Cash is different. The 50-öre coin's last day as legal tender was 30 September 2010 (Sveriges Riksbank). The Rounding Act (SFS 1970:1029) covers payment in Swedish coin (§1) and rounds öre to the nearest whole krona (§2): 1–49 öre down, 50–99 up. When the coin was withdrawn, the Riksbank said card payments would not be affected. Keep öre in stored amounts. If you need a cash total, Intl's default rounding (half away from zero) gives the same result at zero decimals:
const cash = new Intl.NumberFormat('sv-SE', { style: 'currency', currency: 'SEK', maximumFractionDigits: 0 });
cash.format(1234.49); // → "1 234 kr"
cash.format(1234.5); // → "1 235 kr"Q&A
Why doesn't my Swedish-formatted number match "1 234,56" in my test?
Your test string uses U+0020. Intl uses U+00A0 between groups and before kr and %, and U+2212 for negatives. Normalise both sides, or compare formatToParts() output.
Is Swedish number formatting the same as Polish?
Only for numbers of five digits or more. They differ on four-digit numbers (1 234 vs 1234), negatives (U+2212 vs hyphen), percent (13 % vs 13%) and short dates (2026-09-27 vs 27.09.2026).
How do I tell SEK from NOK and DKK when all three use kr?
Let Intl choose. In sv-SE, NOK and DKK get their own symbols (1 234,50 Nkr, 1 234,50 Dkr), and en-US shows codes (SEK 1,234.50). Avoid currencyDisplay: 'narrowSymbol': en-US then prints kr 1,234.50 for all three.
Should I round SEK prices to whole kronor?
Only for cash totals. SEK has minor unit 2 (ISO 4217), and card and stored amounts keep öre. The Rounding Act covers payment in coin.
Code Examples
// Basic number
new Intl.NumberFormat('sv-SE').format(1234567.89)
// → "1 234 567,89"
// Currency
new Intl.NumberFormat('sv-SE', {
style: 'currency',
currency: 'SEK'
}).format(1234567.89)
// → "1 234 567,89 kr"
// Percentage
new Intl.NumberFormat('sv-SE', {
style: 'percent',
minimumFractionDigits: 1
}).format(0.125)
// Compact notation
new Intl.NumberFormat('sv-SE', {
notation: 'compact'
}).format(1234567)Negative Number Formats
new Intl.NumberFormat('sv-SE').format(-1234567.89)new Intl.NumberFormat('sv-SE', { style: 'currency', currency: 'SEK', currencySign: 'accounting' }).format(-1234567.89)Continue your localization implementation
Connect this reference to the format, validation, and testing guidance used elsewhere on the site.
Formatting implementation
Numbers, currencies, dates, time zones, numbering systems, and production tests.
Failure patterns
Hardcoded copy, broken layouts, missing context, bidi, and cultural adaptation.
Standards reference
ISO country, currency, and language codes; BCP 47; E.164; and UPU S42.
Validation coverage
Provider evidence, country test cases, geocoding, deliverability, and phone checks.
Locale-aware numbers
Separators, grouping, currency precision, and Intl.NumberFormat patterns.
Localization testing
Pseudolocalization, test matrices, native review, and regional release gates.
Address and phone standards
UPU S42, E.164, adaptive forms, storage, parsing, and validation.
I18n architecture
Messages, Unicode, RTL, locale services, fallbacks, and delivery workflow.
Currency reference
ISO 4217 codes, symbols, minor units, and implementation examples.
Address formats
Country templates, field order, and accessible international forms.
Phone formats
E.164 storage, regional display, parsing, and validation.
Compare locales
Inspect the same numeric value across several country formats.
Interactive tools
Try number, address, and phone formatting in your browser.
