Roman Numeral Converter Guide: Convert Numbers Between Systems

Everything you need to know about Roman numerals -- from the seven basic symbols and subtractive notation to practical conversion techniques and modern-day usage.

By Suvom Das · March 27, 2026 · 12 min read

Table of Contents

  1. What Are Roman Numerals?
  2. The Seven Basic Symbols
  3. Additive Notation
  4. Subtractive Notation
  5. How to Convert Decimal to Roman
  6. How to Convert Roman to Decimal
  7. Rules and Validation
  8. History of Roman Numerals
  9. Modern Uses of Roman Numerals
  10. Common Year Conversions
  11. Roman Numerals in Programming
  12. Frequently Asked Questions

What Are Roman Numerals?

Roman numerals are a numeral system that originated in ancient Rome and was used throughout the Roman Empire for commerce, record-keeping, and inscriptions. Unlike the modern decimal (base-10) system that uses positional notation with digits 0-9, Roman numerals use combinations of letters from the Latin alphabet to represent values. The system is additive and subtractive, meaning values are determined by adding or subtracting the values of individual symbols based on their position relative to each other.

Despite being thousands of years old, Roman numerals remain in common use today. You will find them on clock faces, in book chapter numbering, movie sequel titles, Super Bowl naming, outline formatting, and many formal or decorative contexts. Understanding how to read and write Roman numerals is a practical skill that comes up surprisingly often in daily life.

The Roman numeral system has no concept of zero, no symbol for negative numbers, and is not well-suited for complex arithmetic. Its primary strength lies in its visual clarity for representing ordered quantities and its enduring cultural significance. While the Hindu-Arabic numeral system (1, 2, 3, ...) replaced Roman numerals for mathematical computation centuries ago, the Roman system persists as a secondary numbering convention across the world.

The Seven Basic Symbols

The entire Roman numeral system is built from just seven symbols, each representing a fixed value:

SymbolValueName
I1One (unus)
V5Five (quinque)
X10Ten (decem)
L50Fifty (quinquaginta)
C100One hundred (centum)
D500Five hundred (quingenti)
M1000One thousand (mille)

These seven symbols can be combined in various ways to represent any integer from 1 to 3999 using the standard notation rules. The symbols are arranged in descending order, with M being the largest and I the smallest. Notice that the values alternate between powers of ten (1, 10, 100, 1000) and half-powers (5, 50, 500), creating a natural pairing system.

Additive Notation

The fundamental principle of Roman numerals is additive notation: when symbols are arranged from largest to smallest (left to right), their values are added together. This is the most intuitive way to read Roman numerals.

Examples of additive notation:

When reading a Roman numeral using additive notation, scan from left to right and add each symbol's value to the running total. This works whenever each symbol is greater than or equal to the symbol that follows it.

Subtractive Notation

Subtractive notation is a shorthand convention that makes Roman numerals more compact. When a smaller-value symbol appears immediately before a larger-value symbol, you subtract the smaller from the larger instead of adding them.

There are exactly six standard subtractive combinations:

Only I, X, and C can be used as subtractive numerals. I can only precede V and X. X can only precede L and C. C can only precede D and M. You will never see combinations like IL (49), IC (99), or XM (990) -- these are invalid in standard notation.

A famous example is the year 1994: MCMXCIV. Breaking this down: M (1000) + CM (900) + XC (90) + IV (4) = 1994. Without subtractive notation, this would require many more characters.

How to Convert Decimal to Roman

Converting a decimal number to Roman numerals follows a systematic greedy algorithm. Start with the largest possible value and work downward:

  1. Create a lookup table of all 13 values (including subtractive combinations) in descending order: 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1.
  2. Starting with the largest value, repeatedly subtract it from the number and append the corresponding symbol to the result until the number is less than that value.
  3. Move to the next smaller value and repeat.
  4. Continue until the number reaches zero.

Let us walk through converting 1994 step by step:

1994 >= 1000  =>  M     (remaining: 994)
994  >= 900   =>  CM    (remaining: 94)
94   >= 90    =>  XC    (remaining: 4)
4    >= 4     =>  IV    (remaining: 0)

Result: MCMXCIV

Another example -- converting 2726:

2726 >= 1000  =>  M     (remaining: 1726)
1726 >= 1000  =>  M     (remaining: 726)
726  >= 500   =>  D     (remaining: 226)
226  >= 100   =>  C     (remaining: 126)
126  >= 100   =>  C     (remaining: 26)
26   >= 10    =>  X     (remaining: 16)
16   >= 10    =>  X     (remaining: 6)
6    >= 5     =>  V     (remaining: 1)
1    >= 1     =>  I     (remaining: 0)

Result: MMDCCXXVI

This algorithm is guaranteed to produce the correct, canonical Roman numeral representation for any integer from 1 to 3999. It is simple to implement programmatically and runs in constant time since the maximum number of iterations is bounded.

How to Convert Roman to Decimal

Converting Roman numerals back to decimal is equally systematic. Scan the numeral from left to right and apply the following rule at each position:

  1. Look at the current symbol and the next symbol.
  2. If the current symbol's value is less than the next symbol's value, subtract the current value from the running total (subtractive notation).
  3. Otherwise, add the current symbol's value to the running total.
  4. Move to the next symbol and repeat.

Example -- converting MCMXCIV:

M: 1000 >= C(100)?  Yes => add 1000  (total: 1000)
C:  100 >= M(1000)? No  => subtract  (total: 1000)
M: 1000 >= X(10)?   Yes => add 900   (total: 1900)  [CM = 900]
X:   10 >= C(100)?  No  => subtract  (total: 1900)
C:  100 >= I(1)?    Yes => add 90    (total: 1990)  [XC = 90]
I:    1 >= V(5)?    No  => subtract  (total: 1990)
V:    5 >= end      Yes => add 4     (total: 1994)  [IV = 4]

Result: 1994

An alternative approach treats the subtractive pairs as atomic units: first scan for CM, CD, XC, XL, IX, and IV, then process the remaining individual symbols. Both methods produce the same result.

Rules and Validation

Not every combination of Roman numeral letters is valid. A properly formed Roman numeral must follow these rules:

A valid Roman numeral can be verified using this regular expression pattern: ^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$. This regex ensures that each position in the numeral follows the correct structural rules.

History of Roman Numerals

The Roman numeral system evolved from Etruscan numerals used by the Etruscan civilization in what is now central Italy. The earliest known use of Roman numerals dates back to around the 7th century BCE, inscribed on stones and pottery. As the Roman Republic expanded and eventually became the Roman Empire, the numeral system spread throughout Europe, North Africa, and the Middle East.

In the original Roman system, subtractive notation was not consistently used. Many ancient inscriptions write 4 as IIII rather than IV, and 9 as VIIII rather than IX. The standardization of subtractive notation came later, during the medieval period, as scribes sought to save space and writing materials. Even today, the use of IIII on clock faces is a deliberate design choice rooted in tradition, aesthetics, and visual balance on a circular dial.

The decline of Roman numerals as the primary numeral system began with the introduction of Hindu-Arabic numerals (0, 1, 2, 3, ...) to Europe through Arabic mathematicians in the 10th-13th centuries. The positional decimal system, with its concept of zero and simpler arithmetic operations, proved far superior for commerce, science, and engineering. By the late medieval period, Hindu-Arabic numerals had largely replaced Roman numerals for computation, though Roman numerals continued in formal, decorative, and ceremonial contexts.

Modern Uses of Roman Numerals

Despite being supplanted for arithmetic, Roman numerals remain remarkably prevalent in modern life:

Common Year Conversions

Years are one of the most common values people convert to Roman numerals. Here are some notable year conversions:

YearRoman NumeralSignificance
1776MDCCLXXVIUS Declaration of Independence
1900MCMTurn of the 20th century
1999MCMXCIXEnd of the 20th century
2000MMMillennium
2024MMXXIVRecent year
2026MMXXVICurrent year

Roman Numerals in Programming

Roman numeral conversion is a classic programming exercise that appears frequently in coding interviews and algorithmic challenges. Here is a simple JavaScript implementation of the decimal-to-Roman conversion algorithm:

function decimalToRoman(num) {
  var map = [
    [1000,'M'], [900,'CM'], [500,'D'], [400,'CD'],
    [100,'C'],  [90,'XC'],  [50,'L'],  [40,'XL'],
    [10,'X'],   [9,'IX'],   [5,'V'],   [4,'IV'], [1,'I']
  ];
  var result = '';
  for (var i = 0; i < map.length; i++) {
    while (num >= map[i][0]) {
      result += map[i][1];
      num -= map[i][0];
    }
  }
  return result;
}

This algorithm runs in O(1) time complexity since the maximum number of iterations is bounded by the range (1-3999). The greedy approach works because the Roman numeral value system satisfies the greedy property -- the locally optimal choice at each step leads to the globally optimal solution.

The reverse conversion (Roman to decimal) is equally straightforward. The key insight is comparing each symbol with the one that follows it to determine whether to add or subtract. This makes it a popular problem for teaching string parsing and conditional logic in introductory programming courses.

Many programming languages and frameworks include Roman numeral conversion utilities in their standard libraries or popular packages. For instance, Python developers can use libraries like roman, while Ruby has built-in support through various gems. Our online tool provides this functionality without any code required -- just type and convert.

Frequently Asked Questions

What are the seven Roman numeral symbols?
The seven basic symbols are I (1), V (5), X (10), L (50), C (100), D (500), and M (1000). All Roman numerals from 1 to 3999 are composed using combinations of these seven symbols with additive and subtractive notation rules.
How do you convert 2026 to Roman numerals?
2026 converts to MMXXVI. The breakdown: M (1000) + M (1000) + X (10) + X (10) + V (5) + I (1) = 2026. Since there are no subtractive combinations needed, this is a straightforward additive conversion.
Why do clocks use IIII instead of IV?
Several theories explain this convention. The most popular is visual balance: IIII creates visual symmetry with VIII on the opposite side of the dial. Another theory is that IV was avoided out of respect for the Roman god Jupiter (IVPITER in Latin). Some historians suggest it was simply the prevalent Roman convention before subtractive notation was standardized.
Can Roman numerals represent fractions or decimals?
The standard Roman numeral system represents only positive integers from 1 to 3999. However, the ancient Romans did have a separate system for fractions based on twelfths (unciae). For example, S represented 1/2 (six-twelfths). This fractional system is not commonly used today and is not part of the standard Roman numeral notation.
What numbers can you represent with Roman numerals?
Using the standard seven symbols (I, V, X, L, C, D, M), you can represent any integer from 1 to 3999. For numbers above 3999, the vinculum convention places a bar over a numeral to multiply its value by 1000. For example, V-bar equals 5000 and X-bar equals 10,000. This extended system can represent very large numbers but is rarely used in modern practice.

Try the Roman Numeral Converter

Convert between Roman numerals and decimal numbers instantly with step-by-step breakdowns.

Open Roman Numeral Converter →