Roman Numeral Converter
NumbersConvert any number to Roman numerals or decode Roman numerals to digits instantly. Supports 1–3,999 (I to MMMCMXCIX) with complete subtractive notation.
What is a Roman Numerals?
The Roman Numeral Converter translates instantly in both directions: type an Arabic number (1–3,999) and see the Roman numeral, or type a Roman numeral and decode it to digits. Both panels stay in sync — typing in either field updates the other in real time. The converter validates input strictly, rejecting invalid sequences like IIX or VV that would produce incorrect results, and shows the round-trip error message if the numeral does not conform to standard subtractive notation rules.
Roman numerals use seven Latin letters — I, V, X, L, C, D, M — with values of 1, 5, 10, 50, 100, 500, and 1,000 respectively. Numbers are formed by combining these symbols additively, with six specific subtractive pairs (IV, IX, XL, XC, CD, CM) handling the values 4, 9, 40, 90, 400, and 900. The maximum representable number in standard notation is 3,999 (MMMCMXCIX). While the system originated in ancient Rome, it remains in active use today for clock faces, film copyright years, book chapters, legal clause numbering, and formal event sequencing.
For converting between Indian and International naming units like Lakh, Crore, Million, and Billion, see the Indian Number System Converter. For number base conversions (binary, hex, octal), see the Number Base Converter.
How to use this Roman Numerals calculator
- To convert Arabic to Roman: click the Arabic Number panel on the left and type a whole number between 1 and 3,999. The Roman numeral updates in the right panel and the footer shows
= [ROMAN]. - To convert Roman to Arabic: click the Roman Numeral panel on the right and type using the letters I, V, X, L, C, D, M. Letters are automatically uppercased. The Arabic equivalent appears in the left panel.
- Both panels stay in sync — editing either field updates the other. The active panel (the one you last typed in) is highlighted in green.
- Tap any chip in the Base Symbols panel to load that symbol and its value — useful for learning what each symbol represents.
- Tap any row in the Common Examples panel to load a pre-set number and see its Roman form instantly.
- If you enter an invalid Roman numeral (e.g. IIX, VV, or IIII), the panel border turns red and an error message explains the problem. The validation round-trips the numeral — converts it back to Arabic and checks the result matches — ensuring only correctly formed numerals are accepted.
- The page URL updates with each conversion (e.g.
?from=arabic&value=2025), making every result directly shareable.
Formula & Methodology
Arabic to Roman uses a greedy algorithm: subtract the largest possible symbol value from the remaining number, append the symbol to the result, and repeat until nothing remains.
The 13 symbol values used (including the six subtractive pairs):
| Symbol | Value | Symbol | Value |
|--------|-------|--------|-------|
| M | 1,000 | XL | 40 |
| CM | 900 | X | 10 |
| D | 500 | IX | 9 |
| CD | 400 | V | 5 |
| C | 100 | IV | 4 |
| XC | 90 | I | 1 |
| L | 50 | | |
Worked example — 1947:
1947 − 1000 = 947 → M 947 − 900 = 47 → CM 47 − 40 = 7 → XL 7 − 5 = 2 → V 2 − 1 = 1 → I 1 − 1 = 0 → I Result: MCMXLVII
Roman to Arabic scans left to right: if the current symbol's value is less than the next symbol's value, subtract the current symbol; otherwise add it.
Worked example — MCMXLVII:
| Position | Symbol | Next | Action | Running total |
|---|---|---|---|---|
| 1 | M (1000) | C (100) | 1000 > 100 → add | 1000 |
| 2 | C (100) | M (1000) | 100 < 1000 → subtract | 900 |
| 3 | M (1000) | X (10) | 1000 > 10 → add | 1900 |
| 4 | X (10) | L (50) | 10 < 50 → subtract | 1890 |
| 5 | L (50) | V (5) | 50 > 5 → add | 1940 |
| 6 | V (5) | I (1) | 5 > 1 → add | 1945 |
| 7 | I (1) | I (1) | 1 = 1 → add | 1946 |
| 8 | I (1) | — | add | 1947 |
Validation: after parsing, the result is converted back to Roman numerals using the Arabic-to-Roman algorithm. If the round-trip does not match the original input exactly, the numeral is rejected as invalid. This catches sequences like IIX (which would parse to 8 but should be written VIII) and VV (which is never valid). For a look at other number system representations (binary, hexadecimal), see the Number to Words Converter.