dimanche 1er juillet 2018 (), par
// transforme un nombre en sa description textuelle
function num2txt($num){
$res=($num<0)?"moins":"";
$tabchiffres=array("","un","deux","trois","quatre","cinq","six","sept","huit","neuf"); // commence à zéro !
$tabdix=array("","onze","douze","treize","quatorze","quinze","seize"); // idem
$tabdizaines=array("","dix","vingt","trente","quarante","cinquante","soixante"); // idem
$trnum=number_format($num); // pas de partie décimale, une , entre chaque millier
$tabnum=explode(",",$trnum);
$puiss=count($tabnum); // 1 = entre 0 et 999, 2 = entre 1000 et 999 999 milliers, 3 = entre 1 000 000 et 999 999 999 milions, 4 =...
$tabpuis=array("","","mille","million","milliard"); // centaine/dizaine de milliards, centaine/dizaine de million, centaine/dizaine de millier, centaine/dizaine/unité
foreach ($tabnum as $milnum){
$taillenum=strlen($milnum);
$res.=($res!="")?" ":"";
$verrounite=false;
if ($taillenum==3) { // si 3 chiffres, traiter centaines
// si 0 = rien, sinon x cent(s)
if ($milnum[0]==1){
$res.="cent";
}
if ($milnum[0]>1){
$res.=$tabchiffres[$milnum[0]]." cent";
$res.=(($milnum[1]>0)||($milnum[2]>0)||($puiss>=2))?"s":"";
}
}
if ($taillenum>=2) { // si 2 chiffres, traiter dizaines
$pos=($taillenum==3)?1:0;
$res.=($res!="")?" ":"";
//$res.=($pos!=0)?" ":"";
$next=$pos+1;
// si 1
if ($milnum[$pos]==1){
if (($milnum[$next]>=1)&&($milnum[$next]<=6)){
// onze à seize
$res.=$tabdix[$milnum[$next]];
$verrounite=true;
}else{
// 0 + si 7 à 9 = dix-
$res.=$tabdizaines[1];
$res.=($milnum[$next]>=7)?"-":"";
}
}
// si 2 à 6
if (($milnum[$pos]>1)&&($milnum[$pos]<7)){
$res.=$tabdizaines[$milnum[$pos]];
$res.=($milnum[$next]>0)?"-":"";
}
// si 7, 8 et 9 qui utilisent aussi le chiffre des unités
if ($milnum[$pos]==7){
$res.="soixante";
if ($milnum[$next]==0){ $res.="-dix"; }
if ($milnum[$next]==1){ $res.=" et onze"; }
if (($milnum[$next]>=2)&&($milnum[$next]<=6)){ $res.="-".$tabdix[$milnum[$next]]; }
if ($milnum[$next]>=7){ $res.="-dix-".$tabchiffres[$milnum[$next]]; }
$verrounite=true;
}
if ($milnum[$pos]==8){
//$verrounite=true;
$res.="quatre-vingt";
if ($milnum[$next]>1){ $res.="-"; }
}
if ($milnum[$pos]==9){
$res.="quatre-vingt";
if ($milnum[$next]==0){ $res.="-dix"; }
if (($milnum[$next]>=1)&&($milnum[$next]<=6)){ $res.="-".$tabdix[$milnum[$next]]; }
if ($milnum[$next]>=7){ $res.="-dix-".$tabchiffres[$milnum[$next]]; }
$verrounite=true;
}
}
if ($taillenum>=1) { // si 1 chiffres
$pos=$taillenum-1; // dernier chiffre 2-1 = 1 ? 3-1=2
if ($pos==0){
// 1 seul chiffre, donc si >1 ou 1 et puiss = 1, afficher le chiffre
$res.=(($milnum>1)||(($milnum==1)&&($puiss==1)))?$tabchiffres[$milnum]:"";
}else{
if ((!$verrounite)&&($milnum[$pos]!=0)){ // si chiffre dizaine != 7, 8 ou 9
$pre=$pos-1;
if ($milnum[$pre]==0){
$res.=$tabchiffres[$milnum[$pos]];
}
// si dizaine
if ($milnum[$pre]==1){
// déjà un tiret
$res.=$tabchiffres[$milnum[$pos]];
}
// si vingt à 60 ou 80, et 1, mettre x et 1
if (((($milnum[$pre]>=2)&&($milnum[$pre]<=6))||($milnum[$pre]==8))&&($milnum[$pos]==1)){
$res.="et-".$tabchiffres[$milnum[$pos]];
}
// si vingt à 60 ou 80 et pas 1
if (((($milnum[$pre]>=2)&&($milnum[$pre]<=6))||($milnum[$pre]==8))&&($milnum[$pos]!=1)){
$res.=$tabchiffres[$milnum[$pos]];
}
}
}
}
// si total>1, mettre le tabpuiss[puiss]
if (($milnum>=1)&&($tabpuis[$puiss]!="")){
$res.=($res!="")?" ":"";
$res.=$tabpuis[$puiss]; // mille est invariable
// mais million, non
$res.=(($puiss==3)&&($milnum>1))?"s":"";
}
$puiss--;
}
if ($num==0){
$res="zéro";
}
return $res;
}