Nobody wants to read 1234567.89 in a report; 1,234,567.89 is a different story — and the same figure sent to a German client should read 1.234.567,89. This tool puts four switches on screen — thousands separator, decimal separator, decimal places and scientific notation — and the result updates the instant you touch any of them, no spreadsheet formatting dialog required. One warning up front: the rule it uses to read your input is very permissive, permissive enough that a few common notations are misread without any complaint. The notes below spell out which ones.
How to use it
- Type or paste into the "Number to format" field. It arrives pre-filled with
1234567.89as a sample, so just replace it; the placeholder reads "e.g. 1234567.89". - The "Thousands separator" dropdown offers four choices: Comma (,), Period (.), Space ( ) and None.
- The "Decimal separator" dropdown offers two: Period (.) and Comma (,).
- "Decimal places (0–10)" is a number field that snaps back to its bounds immediately — enter 20 and it becomes 10, enter -3 and it becomes 0. It cannot be left empty; delete the contents and it shows 0.
- Ticking "Scientific notation" switches the output to exponential form, and "Decimal places" then controls how many digits the mantissa keeps.
- "Formatted result" at the bottom updates live — there is no run button — with a copy button beside it. When the input cannot be read as a number, the result area shows a single dash
—.
When it comes in handy
Make a figure presentable in a report
Quote totals, monthly revenue, a counter on a dashboard: grouped thousands with two fixed decimals is the most common combination anywhere, and it happens to be this tool's default. Adjust, copy, paste into the deck or the document — easier than changing a cell format and then wrestling with getting the displayed value rather than the underlying one onto the clipboard.
Match the reader's local convention
Germany, Spain and Brazil put a period between thousands and a comma before the decimals; France and most SI documents group with a space; the UK and US use the comma-and-period pairing. When one set of figures goes out to several regions, switch the two dropdowns to each audience's convention before copying. Cheaper than explaining afterwards which dot was which.
Bring mismatched figures onto one scale
Numbers exported from three systems tend to arrive with three decimals, five decimals and none at all. Run each through with "Decimal places" fixed and the column lines up on the decimal point when you paste it into a table. Bear in mind this genuinely rounds the value rather than merely changing how it is displayed.
Strip the decoration off a copied figure
Paste a $1,234.56 or NT$ 89,000 lifted from a web page or a PDF and the currency symbol and grouping commas are ignored; set the thousands separator to None and you have a clean number ready to hand to code. That is a happy side effect of the permissive input rule — the same rule responsible for the traps listed below.
Limits and behavior
- Input is stripped before it is parsed: every character that is not
0–9,.or-is removed, and only what remains gets read as a number. That explains why$1,234.56comes through correctly as 1234.56 — both the currency symbol and the grouping commas are on the removal list. - The same rule silently mangles continental European notation.
1.234,56is stripped to1.234, read as roughly one and a quarter, and printed as1.23at two decimals. Space-grouped1 234,56is worse: it strips to123456and is read as a hundred and twenty-three thousand, off by a factor of a thousand. Neither case produces a warning. The contradiction is that this tool can emit both of those notations and cannot read its own output back — paste its1.234.567,89into the input box and you get1.23. Convert continental figures to the anglophone convention by hand before pasting. - Exponential input is swallowed the same way.
eis not on the keep list, so1e5strips to15and prints as15.00, while1e21becomes121.00. Figures copied out of Python, R or a spreadsheet often carry exponents; expand them to full digits first. - With "Scientific notation" ticked, the two separator dropdowns stop having any effect. That mode emits the exponential string produced directly from the parsed value: no grouping is inserted and the decimal point is always a period. "Decimal places" then governs the mantissa — set it to 0 for
1e+6, to 10 for1.2345678900e+6. - Both dropdowns can be set to the same character, and nothing stops you or warns you. Choose Period for thousands while the decimal separator sits at its default Period and you get
1.234.567.89, in which no reader can tell which dot is the decimal point; choose Comma for both and you get1,234,567,89. Glance at the result area before copying. - Rounding is binary floating-point rounding, which looks at the value actually stored rather than the decimal literal you typed.
1.005at two places gives1.00, not1.01, and2.675gives2.67, because both of those decimals are stored as something a hair smaller;0.005, meanwhile, rounds up to0.01. Settle accounting figures in a decimal type on the server and bring the rounded value here for presentation, rather than letting this page decide the last digit. - Values of 10^21 and above come out in exponential form even with scientific notation switched off. The fixed-decimal routine returns an exponential string at that magnitude by design, and the grouping rule has nothing to bite on, so pasting a 24-digit number gives you
1.2345678901234569e+23in the ordinary mode. It is also a reminder that such a value passed 2^53 - 1 long ago, and its trailing digits are no longer the ones you entered. - Half-width Arabic numerals only. Full-width
123and Arabic-Indic١٢٣are removed entirely during the stripping step, leaving an empty string, so the result area shows the dash rather than an error. Run full-width digits copied from Word or an older report through the full-width converter first. - Parsing keeps only the first number it can make sense of. If the stripped string is still not a valid numeral, the parser stops at the first character it cannot use and returns what came before:
1.2.3reads as 1.2 and1-2reads as 1, neither with any complaint. A minus sign only counts at the very front; one in the middle is treated as noise. - Choosing "Space ( )" inserts an ordinary U+0020 space, not the narrow no-break space U+202F that typesetting uses for digit grouping. The practical difference is that an ordinary space is allowed to break, so a number can end up split across two lines; and when the result is imported into a spreadsheet, space-grouped figures are commonly read as text rather than as numbers.
- Units, currency and percentages are out of scope. There is no currency symbol, no percent sign, no colour for negatives, no CJK myriad grouping, and no Indian lakh-crore style
2,34,567grouping. What you see is these four switches; for full locale-aware formatting reach forIntl.NumberFormatin code. - Formatting happens entirely inside your browser — the contents of the input box are never sent to a server or held anywhere. For the sake of completeness, the page does load third-party resources such as advertising, and those requests carry slot and page information, nothing about the figure you are formatting.
Frequently asked questions
I pasted a German-formatted amount and the answer is completely wrong. What now?
Rewrite it in the anglophone convention before pasting. On the way in, only a period counts as the decimal point, so 1.234,56 has its comma discarded as noise and the remaining 1.234 is read as roughly one and a quarter. In practice: delete the grouping periods and turn the decimal comma into a period in your editor, paste that, then use the two dropdowns to put the continental formatting back on the output. Anglophone in, continental out — that is how this tool is meant to be driven.
Why does `1.005` become `1.00` at two decimal places?
Because 1.005 has no exact binary representation; what is actually stored is around 1.00499999999999989, which of course rounds down at the second place. This is not a quirk of the tool's rounding rule — every environment built on IEEE 754 doubles, including JavaScript, Python floats and Java doubles, gives the same answer. For rounding that satisfies an accountant, compute in a decimal type first: Decimal in Python, BigDecimal in Java, NUMERIC in SQL.
Can I strip the currency symbol and commas but leave everything else untouched?
You can strip them, but nothing here is truly untouched. Setting the thousands separator to None gives you a number without grouping, yet "Decimal places" always applies — it pads or rounds, and there is no "same as input" setting. So $1,234.5 becomes 1234.50 at two places and 1235 at zero. To preserve the original precision, count the digits yourself and set the field to match.
Where did my comma decimal separator go after ticking scientific notation?
It did not go anywhere — that mode simply never consults those two dropdowns. Exponential output is produced by a separate path and displayed exactly as returned, always with a period and never with grouping. Continental exponential notation such as 1,23e+6 is not achievable here; copy the result out and swap the period yourself.
Can I set more than 10 decimal places?
No, the field is clamped to 0–10 and typing 15 rewrites it to 10 as soon as you release the key. The ceiling comes from the interface rather than from any underlying limit, but it is generous enough in practice: a double carries only about 15 to 17 significant digits, and 0.1 at ten decimal places already reads 0.1000000000. Anything beyond that is an artefact of the representation rather than your data.
Why is the result area just a dash?
It means nothing numeric survived the stripping step. The usual causes are an empty input box, a string that is entirely letters, full-width digits, or a lone minus sign. Add half-width digits and the output returns. No error message is shown here; the dash itself is the message that there is nothing to compute.