How to Generate Roman Numerals

One thing you get when you work with a customer base as wide as the one we have at our company is a list of useful scripts. As no two customers want the exact same thing, these little scripts come in handy.

Here is one that I have that changes an Integer into a Roman Numeral.

Let's show some code first:

private string ConvertToRoman(int Value)
        {
            System.Text.StringBuilder sbRN = new System.Text.StringBuilder();

           
            //Start high, and just replace the huge numbers with letters.

            // 1111 -> M111 -> MC11 ->MCX1 -> MCXI
            sbRN.Append(GenerateNumber(ref Value, 1000, 'M'));
            sbRN.Append(GenerateNumber(ref Value, 500, 'D'));
            sbRN.Append(GenerateNumber(ref Value, 100, 'C'));
            sbRN.Append(GenerateNumber(ref Value, 50, 'L'));
            sbRN.Append(GenerateNumber(ref Value, 10, 'X'));
            sbRN.Append(GenerateNumber(ref Value, 5, 'V'));
            sbRN.Append(GenerateNumber(ref Value, 1, 'I'));

            //let's replace the some substrings like:
            //IIII to IV, VIV to IX, etc.

            sbRN.Replace("IIII", "IV");
            sbRN.Replace("VIV", "IX");
            sbRN.Replace("XXXX", "XL");
            sbRN.Replace("LXL", "XC");
            sbRN.Replace("CCCC", "CD");
            sbRN.Replace("DCD", "CM");
            return (sbRN.ToString());
        }

        private string GenerateNumber(ref int value, int magnitude, char letter)
        {
            System.Text.StringBuilder sbNumberString = new System.Text.StringBuilder();

            while (value >= magnitude)
            {
                value -= magnitude;
                sbNumberString.Append(letter);
            }
            return (sbNumberString.ToString());
        }

 

Roman Numerals are pretty straight forward once you get used to it. When you start with a number, say 1234, you will want the roman numeral: MCCXXXIV.

What this above script will do is take in the 1000, set M  to the letter to be returned, and take 1000 off of the Value (Passed by Reference). It will then take the 200 and return CC, the 30 return XXX and the 4 which will return IIII. The IIII is then turned into IV.

Pretty easy script to use, and helpful if you ever need to produce Roman Numerals.


1 Comment

Comments have been disabled for this content.