ugrás a tartalomhoz

Szám szöveggé konvertálása

Scr34m · 2004. Ápr. 6. (K), 10.38
Nincs valakinek egy meglévő kódja, algoritmusa ennek elkészítésére ?

5985 -> ötezer kilencszáznyolcvanöt
 
1

de van de van

bbalint · 2004. Ápr. 7. (Sze), 15.00
cső!

itt van, amit még annak idején a 2003-as phpconfra küldtem, 5 compótnak:

(NOTE: ez egy működő verzió, HTML dolgokat tessék türülni + a szam függvényt meghívni, pl szam(211), szam(1231456234))
  1. <?php  
  2.  function ido(){  
  3.   list($s$ms) = explode(' ', microtime());  
  4.   
  5.   return((float) $s + (float) $ms);  
  6.  }  
  7.   
  8.  $ido = ido();  
  9.   
  10.  $szamok = array();  
  11.  $szamok['0'] = 'nulla';  
  12.  $szamok['1'] = 'egy';  
  13.  $szamok['2'] = 'kettő';  
  14.  $szamok['3'] = 'három';  
  15.  $szamok['4'] = 'négy';  
  16.  $szamok['5'] = 'öt';  
  17.  $szamok['6'] = 'hat';  
  18.  $szamok['7'] = 'hét';  
  19.  $szamok['8'] = 'nyolc';  
  20.  $szamok['9'] = 'kilenc';  
  21.  $szamok['10'] = 'tíz';  
  22.  $szamok['20'] = 'húsz';  
  23.  $szamok['30'] = 'harminc';  
  24.  $szamok['40'] = 'negyven';  
  25.  $szamok['50'] = 'ötven';  
  26.  $szamok['60'] = 'hatvan';  
  27.  $szamok['70'] = 'hetven';  
  28.  $szamok['80'] = 'nyolcvan';  
  29.  $szamok['90'] = 'kilencven';  
  30.  $szamok['100'] = 'száz';  
  31.  $szamok['1000'] = 'ezer';  
  32.  $szamok['1000000'] = 'millió';  
  33.  $szamok['1000000000'] = 'milliárd';  
  34.  $szamok['1000000000000'] = 'trillió';  
  35.  $szamok['1000000000000000'] = 'quadrillió';  
  36.  $szamok['1000000000000000000'] = 'quintillió';  
  37.  $szamok['1000000000000000000000'] = 'sextrillió';  
  38.  $szamok['1000000000000000000000000'] = 'septrillió';  
  39.  $szamok['1000000000000000000000000000'] = 'oktrillió';  
  40.   
  41.  function tortel($tort){  
  42.   global $tortek;  
  43.   
  44.   $tortek[] = $tort;  
  45.   $tortek[] = 'tíz'.$tort;  
  46.   $tortek[] = 'szaz'.$tort;  
  47.  }  
  48.   
  49.  $tortek = array();  
  50.  $tortek[] = 'tized';  
  51.  $tortek[] = 'szazad';  
  52.   
  53.  tortel('ezred');  
  54.  tortel('millimod');  
  55.  tortel('milliardod');  
  56.  tortel('trilliomod');  
  57.  tortel('quadrilliomod');  
  58.  tortel('quintrilliomod');  
  59.  tortel('sextrilliomod');  
  60.  tortel('septrilliomod');  
  61.  tortel('oktrilliomod');  
  62.   
  63.  function szam_1($szam$darabszam = 0){  
  64.   global $szamok;  
  65.   
  66.   if(!$szam)  
  67.    return($szamok['0']);  
  68.   if(($szam == '2') && ($darabszam & 1))  
  69.    return('két');  
  70.   return($szamok[$szam]);  
  71.  }  
  72.   
  73.  function szam_2($szam$darabszam = 0){  
  74.   global $szamok;  
  75.   
  76.   if(!$szam[1])  
  77.    return($szamok[$szam[0].'0']);  
  78.   
  79.   switch($szam[0]){  
  80.    case '1'$return = 'tizen'break;  
  81.    case '2'$return = 'huszon'break;  
  82.    default$return = $szamok[$szam[0].'0']; break;  
  83.   }  
  84.   
  85.   if($szam[1])  
  86.    $return .= szam_1($szam[1], $darabszam);  
  87.   return($return);  
  88.  }  
  89.   
  90.  function szam_3($szam$darabszam = 0){  
  91.   global $szamok;  
  92.   
  93.   if(($szam[0] != '1') || ($darabszam & 2))  
  94.    $return = szam($szam[0], 1);  
  95.   @$return .= $szamok['100'];  
  96.   if($szam = intval($szam[1].$szam[2]))  
  97.    $return .= szam(strval($szam), $darabszam);  
  98.   return($return);  
  99.  }  
  100.   
  101.  function szam_4($szam$darabszam = 0){  
  102.   global $szamok;  
  103.   
  104.   if((intval($szam) > 1999) || ($darabszam & 4))  
  105.    $return = szam(intval(substr($szam, -strlen($szam), strlen($szam) - 3)), 1);  
  106.   @$return .= $szamok['1000'];  
  107.   if($tmp = intval(substr($szam, -3, 3))){  
  108.    if(intval($szam) > 1999)  
  109.     $return .= ' - ';  
  110.    $return .= szam(strval($tmp), $darabszam);  
  111.   }  
  112.   return($return);  
  113.  }  
  114.   
  115.  function szam_5($szam$darabszam = 0){return szam_4($szam$darabszam);}  
  116.  function szam_6($szam$darabszam = 0){return szam_4($szam$darabszam);}  
  117.   
  118.  function _szam($szam$darabszam = 0){  
  119.   global $szamok;  
  120.   
  121.   $strlen = intval(strlen($szam) / 3) * 3;  
  122.   if($strlen == strlen($szam))  
  123.    $strlen -= 3;  
  124.   if(!($darabszam & 8))  
  125.    $return = szam(intval(substr($szam, 0, strlen($szam) - $strlen)), 1);  
  126.   if(($darabszam & 16) && preg_match('/^[0-9]0+$/'$szam))  
  127.    @$return .= ' ';  
  128.   @$return .= $szamok['1'.str_repeat('0'$strlen)];  
  129.   if(($tmp = szam(substr($szam, -$strlen), $darabszam)) && ($tmp != $szamok['0']))  
  130.    $return .= ' - '.$tmp;  
  131.   return($return);  
  132.  }  
  133.   
  134.  function szam($szam$darabszam = 0){  
  135.   if(!strlen($szam = preg_replace('/^0+0/''0'$szam)))  
  136.    return(null);  
  137.   if($szam[0] == '-')  
  138.    return('mínusz '.szam(substr($szam, 1), $darabszam));  
  139.   if(count($tmp = preg_split('/\./'$szam, 2)) - 1){  
  140.    global $szamok$tortek;  
  141.   
  142.    $tort = @$tortek[strlen($tmp[1] = preg_replace('/0+$/'''$tmp[1])) - 1];  
  143.    if(($tmp[1] = szam(intval($tmp[1]))) && ($tmp[1] != $szamok['0']))  
  144.     return szam($tmp[0]).' egész '.$tmp[1].' '.$tort;  
  145.    $szam = $tmp[0];  
  146.   }  
  147.   $szam = preg_replace('/^0+0/''0'$szam);  
  148.   if(($tmp = strlen($szam)) < 7)  
  149.    return(call_user_func('szam_'.$tmp$szam$darabszam));  
  150.   return(_szam($szam,$darabszam));  
  151.  }  
  152. ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  153. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="hu" lang="hu">  
  154.  <head>  
  155.   <title>[teszt] :: [szám-konverter]</title>  
  156.   <style type="text/css">  
  157.   <!--  
  158.    b,body,font,form,input{  
  159.     cursor:default;  
  160.    }  
  161.    input{  
  162.     border: 2px groove #cccccc;  
  163.     background-color: #000000;  
  164.     color: #ffffff;  
  165.     font-family: Verdana, Arial Narrow, Sans-serif;  
  166.     font-size: 11px;  
  167.    }  
  168.   -->  
  169.   </style>  
  170.  </head>  
  171.  <body bgcolor="#2a2a2a" text="gray">  
  172.   <form action="szam.php" method="get">  
  173.    <font face="Verdana,Arial Narrow,Sans-serif" size="1">  
  174.     szám konverter :<b>: [teszt]</b><br />  
  175.     írj be egy számot, és nyomj a mehet-re:<br />  
  176.     <br />  
  177.     <input type="text" name="n" size="68" value="<?  
  178.      if(isset($_GET['n']))  
  179.       print($_GET['n']);  
  180.     ?>" maxlength="61" /><br />  
  181.     <input type="submit" value="mehet" /><?php  
  182.      if(preg_match('/n=(\-?)(0*)(\d+)(\.(\d+))?/'$_SERVER['QUERY_STRING'], $m) && (strlen($m[3]) <= 30) && (@strlen($m[5]) <= 29)){  
  183.       $darabszam = 0;  
  184.       if(@is_array($_GET['d']))  
  185.        $darabszam |= array_sum($_GET['d']);  
  186.       print('<br />  
  187.     <br />  
  188.     <b>['.$_GET['n'].'] :</b>: '.szam($m[1].$m[3].@$m[4], $darabszam));  
  189.      }  
  190.     ?><br />  
  191.     <br />  
  192.     <b>[</b> ez a weblap kb. <?php print(substr(strval(ido() - $ido), 0, 8)); ?> másodperc alatt lett generálva. <b>]</b>  
  193.    </font>  
  194.   </form>  
  195.  </body>  
  196. </html>  
2

Itt egy másik "azaz" függvény

szagabesz · 2009. Szep. 15. (K), 10.48
PHP környezetben számot szöveggé. Nyomtatott számlákra például.

Nekem nem működött bbalint verziója, íme egy osztályba foglalt, rövidebb kód. A legnagyobb szám, amit még képes szöveggé alakítani: 999999999999

használata:
  1. $converter = new Azaz();  
  2. echo $converter->toString(65486);  
  3. echo $converter->toString(999999999999);  
  4. echo $converter->toString(-1111);  
  5. echo $converter->toString(-4569845);  
íme az osztály:
  1. class Azaz  
  2. {  
  3.   
  4.   public function  __construct()  
  5.   {  
  6.     $this->EgyesStr = array('''egy''kettő''három''négy''öt''hat''hét''nyolc''kilenc');  
  7.     $this->TizesStr = array('''tíz''húsz''harminc''negyven''ötven''hatvan''hetven''nyolcvan''kilencven');  
  8.     $this->TizenStr = array('''tizen''huszon''harminc''negyven''ötven''hatvan''hetven''nyolcvan''kilencven');  
  9.   }  
  10.   
  11.   public static function toString($Mit)  
  12.   {  
  13.     $this->Mit = $Mit;  
  14.     $this->Result = '';  
  15.     if ($Mit == 0)  
  16.     {  
  17.       $this->Result = 'Nulla';  
  18.     }  
  19.     else  
  20.     {  
  21.       $this->Maradek = abs($this->Mit);  
  22.       if ($this->Maradek > 999999999999)  
  23.       {  
  24.         throw new Exception('Túl nagy szám: '.$this->Maradek);  
  25.       }  
  26.       $this->Alakit($this->Maradek, 1000000000, 'milliárd');  
  27.       $this->Alakit($this->Maradek, 1000000, 'millió');  
  28.       $this->Alakit($this->Maradek, 1000, 'ezer');  
  29.       $this->Alakit($this->Maradek, 1, '');  
  30.       $this->Result = ucfirst($this->Result);  
  31.       if ( $Mit < 0 )  
  32.         $this->Result = 'Mínusz ' . $this->Result;  
  33.     }  
  34.       
  35.     return $this->Result;  
  36.   }  
  37.   
  38.   
  39.   protected function Alakit($Maradek$Oszto$Osztonev)  
  40.   {  
  41.     if ( $Maradek >= $Oszto)  
  42.     {  
  43.       if ( mb_strlen($this->Result) > 0 )  
  44.         $this->Result = $this->Result . '-';  
  45.   
  46.       $this->Mit = $Maradek / $Oszto;  
  47.       if ( $this->Mit >= 100)  
  48.         $this->Result = $this->Result . $this->EgyesStr[$this->Mit / 100] . 'száz';  
  49.   
  50.       $this->Mit = $this->Mit % 100;  
  51.       if ($this->Mit % 10 !== 0)  
  52.         $this->Result = $this->Result . $this->TizenStr[$this->Mit / 10] . $this->EgyesStr[$this->Mit % 10] . $Osztonev;  
  53.       else  
  54.         $this->Result = $this->Result . $this->TizesStr[$this->Mit / 10] . $Osztonev;  
  55.     }  
  56.   
  57.     $this->Maradek = $this->Maradek % $Oszto;  
  58.   }  
  59.   
  60. }