mrbusche.com

Converting roman numerals to numbers using ColdFusion

I recently worked on a project that required translating roman numerals to the numerical counterpart, this needed to work for anything from 1-2000. I wrote my own using TDD and eventually came up with this

component { public function romanToDecimal(romanNumber) { var newNumber = 0; var previousNumber = 0; var romanToNumberMapping = {M:1000, D:500, C:100, L:50, X:10, V:5, I:1}; var romanNumeral = ucase(romanNumber); for (var oneChar = romanNumeral.length() - 1; oneChar >= 0; oneChar--) { var oneLetter = romanNumeral.charAt(oneChar); if (previousNumber > romanToNumberMapping[oneLetter]) { newNumber-=romanToNumberMapping[oneLetter]; } else { newNumber+=romanToNumberMapping[oneLetter]; } previousNumber = romanToNumberMapping[oneLetter]; } return newNumber; } }

It's simple enough that you should be able to add each roman numeral and it's number into the mapping and this should theoretically work for any roman numeral, but I only tested up to 2000. This assumes that you have entered a valid roman numeral that can be translated to 1-2000.

The tests are written in MXUnit, so it's a lot of repetition. I'll be following up with a groovy example using spock that should have a much cleaner looking test. I've attached the test file and additionally have submitted this to cflib for approval.

You can download the test here if you're so inclined.