function convertNumber($num)
{
list($num, $dec) = explode(".", $num);
$output = "";
if($num{0} == "-")
{
$output = "negative ";
$num = ltrim($num, "-");
}
else if($num{0} == "+")
{
$output = "positive ";
$num = ltrim($num, "+");
}
if($num{0} == "0")
{
$output .= "zero";
}
else
{
$num = str_pad($num, 36, "0", STR_PAD_LEFT);
$group = rtrim(chunk_split($num, 3, " "), " ");
$groups = explode(" ", $group);
$groups2 = array();
foreach($groups as $g) $groups2[] = convertThreeDigit($g{0}, $g{1}, $g{2});
for($z = 0; $z < count($groups2); $z++)
{
if($groups2[$z] != "")
{
$output .= $groups2[$z].convertGroup(11 - $z).($z < 11 && !array_search('', array_slice($groups2, $z + 1, -1))
&& $groups2[11] != '' && $groups[11]{0} == '0' ? " and " : ", ");
}
}
$output = rtrim($output, ", ");
}
if($dec > 0)
{
$output .= " CENTS";
for($i = 0; $i < strlen($dec); $i++) $output .= " ".convertDigit($dec{$i});
}
return $output;
}
function convertGroup($index)
{
switch($index)
{
case 11: return " decillion";
case 10: return " nonillion";
case 9: return " octillion";
case 8: return " septillion";
case 7: return " sextillion";
case 6: return " quintrillion";
case 5: return " quadrillion";
case 4: return " trillion";
case 3: return " billion";
case 2: return " million";
case 1: return " thousand";
case 0: return "";
}
}
function convertThreeDigit($dig1, $dig2, $dig3)
{
$output = "";
if($dig1 == "0" && $dig2 == "0" && $dig3 == "0") return "";
if($dig1 != "0")
{
$output .= convertDigit($dig1)." hundred";
if($dig2 != "0" || $dig3 != "0") $output .= " and ";
}
if($dig2 != "0") $output .= convertTwoDigit($dig2, $dig3);
else if($dig3 != "0") $output .= convertDigit($dig3);
return $output;
}
function convertTwoDigit($dig1, $dig2)
{
if($dig2 == "0")
{
switch($dig1)
{
case "1": return "ten";
case "2": return "twenty";
case "3": return "thirty";
case "4": return "forty";
case "5": return "fifty";
case "6": return "sixty";
case "7": return "seventy";
case "8": return "eighty";
case "9": return "ninety";
}
}
else if($dig1 == "1")
{
switch($dig2)
{
case "1": return "eleven";
case "2": return "twelve";
case "3": return "thirteen";
case "4": return "fourteen";
case "5": return "fifteen";
case "6": return "sixteen";
case "7": return "seventeen";
case "8": return "eighteen";
case "9": return "nineteen";
}
}
else
{
$temp = convertDigit($dig2);
switch($dig1)
{
case "2": return "twenty-$temp";
case "3": return "thirty-$temp";
case "4": return "forty-$temp";
case "5": return "fifty-$temp";
case "6": return "sixty-$temp";
case "7": return "seventy-$temp";
case "8": return "eighty-$temp";
case "9": return "ninety-$temp";
}
}
}
function convertDigit($digit)
{
switch($digit)
{
case "0": return "zero";
case "1": return "one";
case "2": return "two";
case "3": return "three";
case "4": return "four";
case "5": return "five";
case "6": return "six";
case "7": return "seven";
case "8": return "eight";
case "9": return "nine";
}
}
如果我使用此代码并调用函数:
echo convertNumber(72253.80)." ONLY";
返回seventy-two thousand, two hundred and fifty-three CENTS eight ONLY
,但我需要它返回八十而不是八。
同样的:
echo convertNumber(72253.25)." ONLY";
返回seventy-two thousand, two hundred and fifty-three CENTS two five ONLY
,但我需要它返回二十五而不是二五。
答案 0 :(得分:4)
您为小数位调用了错误的函数,此部分在此处:
if($dec > 0)
{
$output .= " CENTS";
for($i = 0; $i < strlen($dec); $i++) $output .= " ".convertDigit($dec{$i});
}
需要:
if($dec > 0)
{
$output .= " CENTS";
$output .= " ".convertTwoDigit($dec{0},$dec{1});
}