Roman Numeral Symbols
Unicode has single characters for Roman numerals that look almost exactly like typed capital letters. Here they are, and here is why most text should use the letters instead.
Tap any tile to copy it. Nothing is sent anywhere — the copy happens in your browser.
What the forty are
U+2160 to U+216F are capitals: one character each for one through twelve, then fifty, one hundred, five hundred and one thousand. U+2170 to U+217F repeat the run in lowercase. U+2180 to U+2188 hold older and larger forms, up to ONE HUNDRED THOUSAND.
The precomposed run stops at twelve. There is no single character for thirteen, and none for zero.
Thirty-nine of the forty are general category Nl, Number Letter. The exception is U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED, which is Lu, an uppercase letter; its lowercase partner is encoded under a Latin letter name instead, which is why it is not in this grid.
They are numbers to some code and not to others
Three ordinary tests disagree about them. Asked whether one is a digit, a library says no: digit means general category Nd and these are Nl. Asked whether it is numeric, the same library says yes. Asked for its numeric value, it answers: 8 for ROMAN NUMERAL EIGHT, 50 for ROMAN NUMERAL FIFTY, 100000 for ROMAN NUMERAL ONE HUNDRED THOUSAND. Whether a form accepts one depends on which of the three its validator asks, and you cannot tell from outside.
What normalisation does to them
Most of the forty carry a compatibility decomposition straight back to Latin letters. Under NFKC, ROMAN NUMERAL ONE becomes I, ROMAN NUMERAL TEN becomes X, ROMAN NUMERAL FIFTY becomes L and ROMAN NUMERAL ONE THOUSAND becomes M. ROMAN NUMERAL TWELVE becomes three characters, X then I then I — so one pasted character can turn into three and a length check on the field moves underneath you.
The archaic forms behave differently: U+2183 and U+2185 to U+2188 have no decomposition and pass through unchanged. A normalising field rewrites part of the set and keeps the rest.
Use the Latin letters
For almost anything you type, write I, V, X, L, C, D and M. The reasons are mechanical rather than stylistic.
- A reader searching for Chapter VII typed in letters will not match text stored as U+2166, unless the search normalises first.
- The letters are ASCII, so nothing strips them, re-encodes them or drops them at a form boundary.
- A field that normalises converts them into exactly those letters anyway, by a longer route and with a length you did not choose.
- Text-to-speech reads whatever its tables hold for a character. The letters are ordinary ASCII; the precomposed numerals are separate codepoints, and whether one is announced as a numeral, a letter or not at all depends on that table.
The values are in the names: ROMAN NUMERAL FIFTY normalises to L, ONE HUNDRED to C, FIVE HUNDRED to D, ONE THOUSAND to M.
The precomposed characters earn their place where the glyph must occupy exactly one cell, and where you know nothing normalises along the way.
Width is not consistent either
U+2160 to U+216B, one through twelve, are East Asian width Ambiguous, while U+216C to U+216F, the characters for fifty and above, are Narrow. The lowercase run splits elsewhere: U+2170 to U+2179 are Ambiguous and U+217A onwards Narrow, so lowercase eleven and twelve are Narrow while their capitals are not. Twenty-two of the forty are Ambiguous, eighteen Narrow. In a terminal that renders ambiguous characters double-width, a column of numerals will not line up with itself.
Nearby
The superscript digits behave the same way under normalisation — one character carrying a compatibility mapping back to a plain one — and are on exponent symbols; the operators are on math symbols. Everything general, this page included, is indexed on symbols to copy and paste.