# Re: [PHP-DB] Re: Now, how about Roman Numerals?

```"Richard Hutchins" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> Here's a rundown of what the script is doing based on your input:
>
> If you pass in the number 155, here are the calculations:
>\$m = \$num / 1000; //\$m will be equal to .155
>\$c = (\$num % 1000) / 100; //\$c will be equal to 1.55
>\$x = (\$num % 100) / 10; //\$x will be equal to 5.5
>\$i = \$num % 10; //\$i will be equal to 5
>[snip]```
```
Yes, that's exactly the problem... I assumed
integer-only input and casting.  Here is a fixed
(tested) version:

<?php

function RomanDigit(\$dig, \$one, \$five, \$ten) {
switch(\$dig) {
case 0:    return "";
case 1:    return "\$one";
case 2:    return "\$one\$one";
case 3:    return "\$one\$one\$one";
case 4:    return "\$one\$five";
case 5:    return "\$five";
case 6:    return "\$five\$one";
case 7:    return "\$five\$one\$one";
case 8:    return "\$five\$one\$one\$one";
case 9:    return "\$one\$ten";
}
}

function IntToRoman(\$num) {
\$num = (int) \$num;
if ((\$num < 1) || (\$num > 3999))
return("No corresponding Roman number!");

\$m = (int) (\$num * 0.001);          \$num -= \$m*1000;
\$c = (int) (\$num * 0.01);           \$num -= \$c*100;
\$x = (int) (\$num * 0.1);            \$num -= \$x*10;
\$i = (int) (\$num);

// echo "m = \$m, c = \$c, x = \$x, i = \$i   ";

return(
RomanDigit(\$m, 'M', '', '')
. RomanDigit(\$c, 'C', 'D', 'M')
. RomanDigit(\$x, 'X', 'L', 'C')
. RomanDigit(\$i, 'I', 'V', 'X')
);
}

?>

and my test script:

<?php

include("to_roman.php");

\$test = array( 8, 19, 155, 980, 9.8, -3, 3999, 4000, "abc", "", array() );

foreach(\$test as \$num)
echo "\$num =&gt; ".IntToRoman(\$num)."<br/>";

?>

--
Hugh Bothwell     [EMAIL PROTECTED]     Kingston ON Canada
v3.1 GCS/E/AT d- s+: a- C+++ L++>+++\$ P+ E- W+++\$ N++ K? w++ M PS+
PE++ Y+ PGP+ t-- 5++ !X R+ tv b++++ DI+++ D-(++) G+ e(++) h-- r- y+

--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

```