Hi lulu, gerade auf http://www.phpbuilder.com/ gefunden:
<? /**************************************** numToString(int $number);
Author: Chris Heald Email: cheald45@hotmail.com Creation date: 1/9/02
License: No restriction, provided this header is left intact. You may change the purpose if you update the code - leave the author, email, creation date, license, and changelog intact. You may append to the changelog as you make changes.
Purpose: Use to convert a numeric number to a literal string equivalent. ie: numToString(10) returns "ten". As of right now, it works for any number up to 999,999,999,999,999,999,999,999.999999999 - if you need more than that, add to the $places array.
Possible future enhancements: Multiple languages. I might be able to get some Spanish done, but other than that, I'm out of luck. If anyone wants to adapt language files, please feel free. I'm sure the logic will have to be changed, too.
I needed this for a personal site, and thought I'd share it. Please feel free to expand or enhance it, and feel free to email me if you have questions.
*** Change Log *** 01/08/02 - CMH Created File. Version 1.00 01/16/02 - CMH Fixed problem with numbers between 14 and 19 being translated as "teen four", "teen five", etc. Fixed lack of commas in places after the decimal. Fixed lack of place notation after the decimal. Fixed lack of dashes in numbers after the decimal. ****************** ****************************************/ function numToString($number) { global $single, $hundred, $odd, $tens; $return = ""; $single = array ( "1" => "one", "2" => "two", "3" => "three", "4" => "four", "5" => "five", "6" => "six", "7" => "seven", "8" => "eight", "9" => "nine", "0" => "zero" ); $hundred = "hundred"; $places = array ( "0" => "", "1" => "thousand", "2" => "million", "3" => "billion", "4" => "trillion", "5" => "quadrillion", "6" => "quintillion", "7" => "sextillion" ); $tens = array ( "1" => "teen", "2" => "twenty", "3" => "thirty", "4" => "forty", "5" => "fifty", "6" => "sixty", "7" => "seventy", "8" => "eighty", "9" => "ninety" ); $odds = array ( "10" => "ten", "11" => "eleven", "12" => "twelve" ); if(!is_numeric($number)) return false; $parts = explode(".",$number); $number = $parts[0]; $decimal = @$parts[1]; if(@!$number) $return = "zero "; if(@!$decimal) $decimal = 0; $place = floor(strlen($number) / 3); $remainder = 3 - (strlen($number) % 3); $number = str_pad($number,($place * 3 == 0 ? 3 : $place * 3), "0", STR_PAD_LEFT); while(strlen($number) > 0) { $sets[@++$i] = substr($number,strlen($number) - 3, 3); $number = substr($number,0,strlen($number) - 3); } $setno = 0; $sets = array_reverse($sets); foreach($sets as $set) { $set = str_pad($set,3, "0", STR_PAD_LEFT); $p1 = substr($set,0,1); $p2 = substr($set,1,2); if(substr($set,0,1) != "0") $return .= $single[$p1] . " " . $hundred . " "; $add = ""; if(@$odds[$p2]) $return .= $odds[$p2] . " "; else { if(substr($p2,0,1) != "0") { if(substr($p2,0,1) == "1") $add = "teen"; else $return .= $tens[substr($p2,0,1)] . (substr($p2,1,1) == 0 ? " " : "-"); } if(substr($p2,1,1) != "0") $return .= $single[substr($p2,1,1)] . "$add "; } $return .= $places[sizeof($sets) - $setno - 1] . ", "; $setno++; } $return = eregi_replace(", $","",$return); if($decimal) { $return .= "and "; $number = "$decimal"; $place = floor(strlen($number) / 3); $remainder = 3 - (strlen($number) % 3); $number = str_pad($number,$place * 3, "0", STR_PAD_LEFT); $sets = array(); $i = 0; while(strlen($number) > 0) { $sets[@++$i] = substr($number,strlen($number) - 3, 3); $number = substr($number,0,strlen($number) - 3); } $setno = 0; $sets = array_reverse($sets); foreach($sets as $set) { $set = str_pad($set,3, "0", STR_PAD_LEFT); $p1 = substr($set,0,1); $p2 = substr($set,1,2); if(substr($set,0,1) != "0") $return .= $single[$p1] . " " . $hundred . " "; if(@$odds[$p2]) $return .= $odds[$p2] . " "; else { $add = ""; if(substr($p2,0,1) != "0") if(substr($p2,0,1) == "1") $add = "teen"; else $return .= $tens[substr($p2,0,1)] . (substr($p2,1,1) == 0 ? " " : "-");; if(substr($p2,1,1) != "0") $return .= $single[substr($p2,1,1)] . "$add "; } $return .= $places[sizeof($sets) - $setno - 1] . ", "; $setno++; } $size = strlen($decimal) == 1 ? "ten" : $places[strlen($decimal)-2]; $return = eregi_replace(" , $"," ",$return); $return .= $size . "th"; if(@$decimal != "1") $return .= "s"; } return ucfirst($return); }
Das löst (hopefully) alle meine Probleme! Und verschafft Dir ein freies Wochenende, falls Du das echt vorhattest.
-- Greetz, Andreas