Romannumerals
by Mike
I needed a function to convert dates to their Roman numeric equivalents. The rules are pretty easy to understand so I thought I’d knock up a function.
function numerals($num) {
//You are free to use this function under a BSD license
//essentially cost free, no code taint,
//but you must leave my copyright in.
//(c)MMXI Mike Preston mikepreston.org
$out='';
while ($num > 0) {
if ($num >= 1000) {
$out.='M';
$num=$num - 1000;
} else if ($num >= 900) {
$out.='CM';
$num=$num - 900;
} else if ($num >= 500) {
$out.='D';
$num=$num - 500;
} else if ($num >= 400) {
$out.='CD';
$num=$num - 400;
} else if ($num >= 100) {
$out.='C';
$num=$num - 100;
} else if ($num >= 90) {
$out.='XC';
$num=$num - 90;
} else if ($num >= 50) {
$out.='L';
$num=$num - 50;
} else if ($num >= 40) {
$out.='XL';
$num=$num - 40;
} else if ($num >= 10) {
$out.='X';
$num=$num - 10;
} else if ($num >= 9) {
$out.='IX';
$num=$num - 9;
} else if ($num >= 5) {
$out.='V';
$num=$num - 5;
} else if ($num >= 4) {
$out.='IV';
$num=$num - 4;
} else {
$out.='I';
$num=$num - 1;
}
}
return $out;
}
Test Code
echo "<pre>Test Start\n"; echo numerals(1) . " - 1\n"; echo numerals(4) . " - 4\n"; echo numerals(5) . " - 5\n"; echo numerals(9) . " - 9\n"; echo numerals(10) . " - 10\n"; echo numerals(40) . " - 40\n"; echo numerals(50) . " - 50\n"; echo numerals(90) . " - 90\n"; echo numerals(100) . " - 100\n"; echo numerals(400) . " - 400\n"; echo numerals(500) . " - 500\n"; echo numerals(900) . " - 900\n"; echo numerals(1000) . " - 1000\n"; echo numerals(2000) . " - 2000\n"; echo numerals(1999) . " - 1999\n"; echo numerals(2001) . " - 2001\n"; echo numerals(2010) . " - 2010\n"; echo numerals(2011) . " - 2011\n"; echo "Test End\n"; ?>tags: