[PHP] Convertir un chiffre en lettre

bonjour ,je cherche un script php qui permet de convertir un chiffre en lettre.
Merci.
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. Je te donne une vrai réponse (très tardive mais comme cela sort en 1 sur Google, je préfère une bonne réponse de suite) :

    <?php
    
    function int2str($a){
    	if ($a<0) return 'moins '.int2str(-$a);
    	if ($a<17){
    		switch ($a){
    			case 0: return 'zero';
    			case 1: return 'un';
    			case 2: return 'deux';
    			case 3: return 'trois';
    			case 4: return 'quatre';
    			case 5: return 'cinq';
    			case 6: return 'six';
    			case 7: return 'sept';
    			case 8: return 'huit';
    			case 9: return 'neuf';
    			case 10: return 'dix';
    			case 11: return 'onze';
    			case 12: return 'douze';
    			case 13: return 'treize';
    			case 14: return 'quatorze';
    			case 15: return 'quinze';
    			case 16: return 'seize';
    		}
    	} else if ($a<20){
    		return 'dix-'.int2str($a-10);
    	} else if ($a<100){
    		if ($a%10==0){
    			switch ($a){
    				case 20: return 'vingt';
    				case 30: return 'trente';
    				case 40: return 'quarante';
    				case 50: return 'cinquante';
    				case 60: return 'soixante';
    				case 70: return 'soixante-dix';
    				case 80: return 'quatre-vingt';
    				case 90: return 'quatre-vingt-dix';
    			}
    		} else if ($a<70){
    			return int2str($a-$a%10).' '.int2str($a%10);
    		} else if ($a<80){
    			return int2str(60).' '.int2str($a%20);
    		} else{
    			return int2str(80).' '.int2str($a%20);
    		}
    	} else if ($a==100){
    		return 'cent';
    	} else if ($a<200){
    		return int2str(100).' '.int2str($a%100);
    	} else if ($a<1000){
    		return int2str((int)($a/100)).' '.int2str(100).' '.int2str($a%100);
    	} else if ($a==1000){
    		return 'mille';
    	} else if ($a<2000){
    		return int2str(1000).' '.int2str($a%1000).' ';
    	} else if ($a<1000000){
    		return int2str((int)($a/1000)).' '.int2str(1000).' '.int2str($a%1000);
    	}  
    	//on pourrait pousser pour aller plus loin, mais c'est sans interret pour ce projet, et pas interessant, c'est pas non plus compliqué...
    }
    echo int2str("19994"); // et voilà ce que ca donne
    
    ?>
    1. Petite correction : prise en charge des virgules et corrections d'orthographes....

      function int2str($a){
      $joakim = explode('.',$a);
      if (isset($joakim[1]) && $joakim[1]!=''){
      return int2str($joakim[0]).' virgule '.int2str($joakim[1]) ;
      }
      if ($a<0) return 'moins '.int2str(-$a);
      if ($a<17){
      switch ($a){
      case 0: return 'zero';
      case 1: return 'un';
      case 2: return 'deux';
      case 3: return 'trois';
      case 4: return 'quatre';
      case 5: return 'cinq';
      case 6: return 'six';
      case 7: return 'sept';
      case 8: return 'huit';
      case 9: return 'neuf';
      case 10: return 'dix';
      case 11: return 'onze';
      case 12: return 'douze';
      case 13: return 'treize';
      case 14: return 'quatorze';
      case 15: return 'quinze';
      case 16: return 'seize';
      }
      } else if ($a<20){
      return 'dix-'.int2str($a-10);
      } else if ($a<100){
      if ($a%10==0){
      switch ($a){
      case 20: return 'vingt';
      case 30: return 'trente';
      case 40: return 'quarante';
      case 50: return 'cinquante';
      case 60: return 'soixante';
      case 70: return 'soixante-dix';
      case 80: return 'quatre-vingt';
      case 90: return 'quatre-vingt-dix';
      }
      } elseif (substr($a, -1)==1){
      if( ((int)($a/10)*10)<70 ){
      return int2str((int)($a/10)*10).'-et-un';
      } elseif ($a==71) {
      return 'soixante-et-onze';
      } elseif ($a==81) {
      return 'quatre-vingt-un';
      } elseif ($a==91) {
      return 'quatre-vingt-onze';
      }
      } elseif ($a<70){
      return int2str($a-$a%10).'-'.int2str($a%10);
      } elseif ($a<80){
      return int2str(60).'-'.int2str($a%20);
      } else{
      return int2str(80).'-'.int2str($a%20);
      }
      } else if ($a==100){
      return 'cent';
      } else if ($a<200){
      return int2str(100).' '.int2str($a%100);
      } else if ($a<1000){
      return int2str((int)($a/100)).' '.int2str(100).' '.int2str($a%100);
      } else if ($a==1000){
      return 'mille';
      } else if ($a<2000){
      return int2str(1000).' '.int2str($a%1000).' ';
      } else if ($a<1000000){
      return int2str((int)($a/1000)).' '.int2str(1000).' '.int2str($a%1000);
      }
      }
    2. Si on teste avec une valeur qui se termine par zéros:par ex 5000.Ca donne "cinq mille zero" .

      <?php
      function int2str($a){
      ...........................................
      .........................................

      } else if ($a<1000000){

      //ajoutez ceci
      if($a%1000!=0){
      $reste=int2str($a%1000);
      }
      else
      {$reste='';
      }


      return int2str((int)($a/1000)).' '.int2str(1000).' '.$reste;
      }
      }
      ?>
    3. Meme çi j'ai ajouté cela la fonction m'affiche toujours un zero : 20900====vingt mille neuf cent zero j'ai besoin d'une solution en urgence SVP!!!!!!!
    4. Avez vous une solution pour le problème de ce zero
    5. Bonjour,
      Voici la modif du fin de code de Airwolf77, pour enlever les "zéro"s inutiles.
      L'ajouts des 3 tirets manquants ainsi que le else final toujours important !

      .....
      	} else if ($a<100){
      		if ($a%10==0){
      			switch ($a){
      				case 20: return 'vingt';
      				case 30: return 'trente';
      				case 40: return 'quarante';
      				case 50: return 'cinquante';
      				case 60: return 'soixante';
      				case 70: return 'soixante-dix';
      				case 80: return 'quatre-vingt';
      				case 90: return 'quatre-vingt-dix';
      			}
      		} else if ($a<70){
      			return int2str($a-$a%10).'-'.int2str($a%10);
      		} else if ($a<80){
      			return int2str(60).'-'.int2str($a%20);
      		} else{
      			return int2str(80).'-'.int2str($a%20);
      		}
      	} else if ($a==100){
      		return 'cent';
      	} else if ($a<200){
      		return int2str(100).($a%100!=0?' '.int2str($a%100):'');
      	} else if ($a<1000){
      		return int2str((int)($a/100)).' '.int2str(100).' '.($a%100!=0?int2str($a%100):'');
      	} else if ($a==1000){
      		return 'mille';
      	} else if ($a<2000){
      		return int2str(1000).($a%1000!=0?' '.int2str($a%1000):'');
      	} else if ($a<1000000){
      		return int2str((int)($a/1000)).' '.int2str(1000).' '.($a%1000!=0?int2str($a%1000):'');
      	}  
      	//on pourrait pousser pour aller plus loin, mais c'est sans interret pour ce projet, et pas interessant, c'est pas non plus compliqué...
      	else return $a;
      }