How to convert a decimal number to roman using JavaScript?

Roman numerals are a number system that uses letters from the Latin alphabet to represent values. In this tutorial, you'll learn how to convert decimal numbers to Roman numerals using JavaScript.

Roman Numeral Symbols

Seven basic symbols form Roman numerals:

I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000

Additionally, subtractive combinations are used for specific values:

  • IV = 4
  • IX = 9
  • XL = 40
  • XC = 90
  • CD = 400
  • CM = 900

Algorithm

The conversion process follows these steps:

STEP 1: Create arrays for Roman symbols and their decimal values in descending order.

STEP 2: Check if the input number is within valid range (1 to 3,888,888).

STEP 3: Iterate through the arrays, subtracting the largest possible value and appending the corresponding Roman symbol.

STEP 4: For numbers ? 4000, apply special formatting with overlines for thousands.

Example 1: Basic Conversion

This example demonstrates converting decimal numbers to Roman numerals using two parallel arrays:

<html>
<head></head>
<body>
   <h2>Convert decimal numbers to Roman numerals</h2>
   <p id="result1"></p>
   <p id="result2"></p>
   
   <script>
      // Roman symbols in descending order
      const romanSymbols = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"];
      
      // Corresponding decimal values
      const decimalValues = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
      
      function convertToRoman(num) {
         if (num <= 0 || num > 3888888) {
            return "Number out of range";
         }
         
         let result = "";
         
         for (let i = 0; i < romanSymbols.length; i++) {
            while (num >= decimalValues[i]) {
               result += romanSymbols[i];
               num -= decimalValues[i];
            }
         }
         
         return result;
      }
      
      document.getElementById("result1").innerHTML = 
         "Roman numeral for 577: " + convertToRoman(577);
      document.getElementById("result2").innerHTML = 
         "Roman numeral for 3542: " + convertToRoman(3542);
   </script>
</body>
</html>
Roman numeral for 577: DLXXVII
Roman numeral for 3542: MMMDXLII

Example 2: Interactive Converter

This example creates an interactive converter where users can input any decimal number:

<html>
<body>
   <h2>Interactive Roman Numeral Converter</h2>
   <p>Enter a decimal number: 
      <input type="number" id="decimalInput" value="50" min="1" max="3888888">
   </p>
   <button onclick="convertNumber()">Convert to Roman</button>
   <p id="output"></p>
   
   <script>
      const romanSymbols = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"];
      const decimalValues = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
      
      function decimalToRoman(num) {
         if (num <= 0 || num > 3888888) {
            return "Invalid input: Number must be between 1 and 3,888,888";
         }
         
         let roman = "";
         let thousands = 0;
         
         // Count thousands for special formatting if needed
         for (let i = 0; i < romanSymbols.length; i++) {
            while (num >= decimalValues[i]) {
               roman += romanSymbols[i];
               num -= decimalValues[i];
               if (romanSymbols[i] === "M") {
                  thousands++;
               }
            }
         }
         
         // Handle large numbers (> 4000) with overlines
         if (thousands > 4) {
            let thousandMs = "";
            for (let j = 0; j < thousands; j++) {
               thousandMs += "M";
            }
            
            let thousandRoman = decimalToRoman(thousands);
            let overlineThousands = "<span style='border-top: 2px solid #000; padding-top: 2px;'>" + 
                                   thousandRoman + "</span>";
            roman = roman.replace(thousandMs, overlineThousands);
         }
         
         return roman;
      }
      
      function convertNumber() {
         const input = document.getElementById("decimalInput").value;
         const number = parseInt(input);
         const result = decimalToRoman(number);
         document.getElementById("output").innerHTML = 
            "Roman numeral: " + result;
      }
   </script>
</body>
</html>

How It Works

The algorithm uses a greedy approach:

  1. Start with the largest Roman numeral value (M = 1000)
  2. Subtract this value from the decimal number as many times as possible
  3. Add the corresponding Roman symbol to the result string
  4. Move to the next smaller value and repeat
  5. Continue until the decimal number becomes zero

Key Points

  • Roman numerals can represent numbers from 1 to 3,888,888
  • Subtractive notation (IV, IX, XL, etc.) prevents repetition of more than 3 identical symbols
  • Numbers above 4000 traditionally use overlines to represent multiplication by 1000
  • The greedy algorithm ensures the shortest possible Roman numeral representation

Conclusion

Converting decimal numbers to Roman numerals in JavaScript involves using parallel arrays and a greedy algorithm. This method ensures accurate conversion while handling both basic and complex Roman numeral representations efficiently.

Updated on: 2026-03-15T23:18:59+05:30

920 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements