Nombre En Lettres -Probleme avec 88 !-
Akim13
Messages postés
60
Statut
Membre
-
Akim13 Messages postés 60 Statut Membre -
Akim13 Messages postés 60 Statut Membre -
Bonjour,
J’ai un problème au niveau des chiffre 88 tous marche bien sauf quand il y a 88
Pouvez vous m’aidez SVP
<?php
function sommeEnLettres($nombre,$devise)
{
//On crйe un tableau avec les unitйs
$unitesExp3 = array(
0 => 'euro',
3 => 'mille',
6 => 'million',
9 => 'milliard',
12 => 'billion',
15 => 'billiard',
18 => 'trillion',
21 => 'trilliard',
24 => 'quatrillion',
27 => 'quatrilliard',
30 => 'quintillion',
33 => 'quintilliard',
36 => 'sextillion',
39 => 'sextilliard',
);
if($devise == "USD") $unitesExp3[0] = "dollar";
if($devise == "EUR") $sousUnite = "centime"; elseif($devise == "USD") $sousUnite = "cent";
//On crйe un tableau avec les 99 (100 avec zero) premiers nombres
$nombres_99 = array("zйro","un","deux","trois","quatre","cinq","six","sept","huit","neuf","dix","onze","douze","treize","quatorze","quinze","seize","dix-sept","dix-huit","dix-neuf","vingt");
$nombres_99[30] = "trente";
$nombres_99[40] = "quarante";
$nombres_99[50] = "cinquante";
$nombres_99[60] = "soixante";
$nombres_99[70] = "soixante-dix";
$nombres_99[71] = "soixante et onze";
$nombres_99[80] = "quatre-vingt";
for ($i=21;$i<=61;$i+=10)
{
$nombres_99[$i] = $nombres_99[$i - 1]." et un";
for ($j=1;$j<=8;$j++)
{
$k = $i + $j;
$nombres_99[$k] = $nombres_99[$i - 1]."-".$nombres_99[$j + 1];
}
}
for ($i=72;$i<=79;$i++)
{
$nombres_99[$i] = "soixante-".$nombres_99[$i-60];
}
for ($i=81;$i<=99;$i++) {
$nombres_99[$i] = "quatre-vingt-".$nombres_99[$i-80];
$i++;
}
//On dйfinit $r qui est le $nombre йcrit en lettres
$r="";
//on recherche si ya une virgule
$virg = strpos($nombre,",",1);
//puis on crйe un tableau avec la partie entiиre et la partie aprиs la virgule
if ($virg == 0) {
$partie[0] = $nombre;
$partie[1] = "00";
}
else
{
$partie = explode(",",$nombre);
}
//on regarde combien ya de chiffres dans chaque partie
$nombreChiffres = strlen($partie[0]);
//on fait en sorte qu'il y a un nombre de chiffres qui tombe sur un multiple de 3 pour les calculs
if($nombreChiffres % 3 == 1) {$partie[0] = "00".$partie[0]; $nombreChiffres += 2;}
elseif($nombreChiffres % 3 == 2) {$partie[0] = "0".$partie[0]; $nombreChiffres += 1;}
$i = $nombreChiffres;
while ($i>0)
{
$centaines = substr($partie[0],$nombreChiffres-$i,1);
$dizainesEtUnites = substr($partie[0],$nombreChiffres-$i+1,2);
if (substr($partie[0],$nombreChiffres-$i+1,1)==0){ $dizainesEtUnites = substr($partie[0],$nombreChiffres-$i+2,1);}
if ($dizainesEtUnites==0 && $centaines > 1)
{
$r = $r.$nombres_99[$centaines]." cent"; if ($i != 6) $r = $r."s "; else $r = $r." ";
}
else
{
if ($centaines == 1) $r = $r."cent ";
else
{
if ($centaines > 1) $r = $r.$nombres_99[$centaines]." cent ";
}
}
if ($dizainesEtUnites == 80 && $i != 6)
{
$r = $r.$nombres_99[$dizainesEtUnites]."s ".$unitesExp3[$i-3]."s ";
}
elseif ($dizainesEtUnites > 1)
{
$r = $r.$nombres_99[$dizainesEtUnites]." ".$unitesExp3[$i-3]; if ($i != 6) $r = $r."s "; else $r = $r." ";
}
elseif($dizainesEtUnites == 1)
{
if ($centaines > 0)
{
$r = $r.$nombres_99[$dizainesEtUnites]." ".$unitesExp3[$i-3]; if ($i != 6) $r = $r."s "; else $r = $r." ";
}
elseif ($i == 3)
{
$r = $r.$nombres_99[$dizainesEtUnites]." ".$unitesExp3[$i-3]; if ($partie[0] > 1) $r = $r."s";
}
else
{
$r = $r.$unitesExp3[$i-3]." ";
}
}
elseif ($dizainesEtUnites == 0 && $centaines > 0)
{
$r = $r.$unitesExp3[$i-3]; if ($i != 6) $r = $r."s "; else $r = $r." ";
}
elseif ($i >= 6 && substr($partie[0],$nombreChiffres-$i,$i) == 0)
{
$r = $r."d'".$unitesExp3[0]."s";
break;
}
elseif ($nombreChiffres-$i == 3 && substr($partie[0],$nombreChiffres-$i,$i) == 0)
{
$r = $r.$unitesExp3[0]."s";
break;
}
$i -= 3;
}
if ($partie[0] == 0) $r = $nombres_99[0]." ".$unitesExp3[0];
//on passe aux centimes
$centimes = substr($partie[1],0,2);
if (substr($partie[1],0,1)==0){ $centimes = substr($partie[1],1,1);}
if ($centimes != 0)
{
$r = $r." et ";
if ($centimes == 80)
{
$r = $r.$nombres_99[$centimes]."s ".$sousUnite."s";
}
elseif ($centimes > 1)
{
$r = $r.$nombres_99[$centimes]." ".$sousUnite."s";
}
elseif($centimes == 1)
{
$r = $r.$nombres_99[$centimes]." ".$sousUnite;
}
}
//on supprime les espaces de dйbut et de fin
$r1 = trim($r);
return($r);
}
echo '__ICI C\'EST BON__ ' .$totalEnLettres = sommeEnLettres(number_format('8887.87', 10, ',', ''),EUR);
?>
<br><br>
<?
echo '__MAIS LA PROBLEME AVEC 88__ ' .$totalEnLettres = sommeEnLettres(number_format('8888.88', 10, ',', ''),EUR);
?>
J’ai un problème au niveau des chiffre 88 tous marche bien sauf quand il y a 88
Pouvez vous m’aidez SVP
<?php
function sommeEnLettres($nombre,$devise)
{
//On crйe un tableau avec les unitйs
$unitesExp3 = array(
0 => 'euro',
3 => 'mille',
6 => 'million',
9 => 'milliard',
12 => 'billion',
15 => 'billiard',
18 => 'trillion',
21 => 'trilliard',
24 => 'quatrillion',
27 => 'quatrilliard',
30 => 'quintillion',
33 => 'quintilliard',
36 => 'sextillion',
39 => 'sextilliard',
);
if($devise == "USD") $unitesExp3[0] = "dollar";
if($devise == "EUR") $sousUnite = "centime"; elseif($devise == "USD") $sousUnite = "cent";
//On crйe un tableau avec les 99 (100 avec zero) premiers nombres
$nombres_99 = array("zйro","un","deux","trois","quatre","cinq","six","sept","huit","neuf","dix","onze","douze","treize","quatorze","quinze","seize","dix-sept","dix-huit","dix-neuf","vingt");
$nombres_99[30] = "trente";
$nombres_99[40] = "quarante";
$nombres_99[50] = "cinquante";
$nombres_99[60] = "soixante";
$nombres_99[70] = "soixante-dix";
$nombres_99[71] = "soixante et onze";
$nombres_99[80] = "quatre-vingt";
for ($i=21;$i<=61;$i+=10)
{
$nombres_99[$i] = $nombres_99[$i - 1]." et un";
for ($j=1;$j<=8;$j++)
{
$k = $i + $j;
$nombres_99[$k] = $nombres_99[$i - 1]."-".$nombres_99[$j + 1];
}
}
for ($i=72;$i<=79;$i++)
{
$nombres_99[$i] = "soixante-".$nombres_99[$i-60];
}
for ($i=81;$i<=99;$i++) {
$nombres_99[$i] = "quatre-vingt-".$nombres_99[$i-80];
$i++;
}
//On dйfinit $r qui est le $nombre йcrit en lettres
$r="";
//on recherche si ya une virgule
$virg = strpos($nombre,",",1);
//puis on crйe un tableau avec la partie entiиre et la partie aprиs la virgule
if ($virg == 0) {
$partie[0] = $nombre;
$partie[1] = "00";
}
else
{
$partie = explode(",",$nombre);
}
//on regarde combien ya de chiffres dans chaque partie
$nombreChiffres = strlen($partie[0]);
//on fait en sorte qu'il y a un nombre de chiffres qui tombe sur un multiple de 3 pour les calculs
if($nombreChiffres % 3 == 1) {$partie[0] = "00".$partie[0]; $nombreChiffres += 2;}
elseif($nombreChiffres % 3 == 2) {$partie[0] = "0".$partie[0]; $nombreChiffres += 1;}
$i = $nombreChiffres;
while ($i>0)
{
$centaines = substr($partie[0],$nombreChiffres-$i,1);
$dizainesEtUnites = substr($partie[0],$nombreChiffres-$i+1,2);
if (substr($partie[0],$nombreChiffres-$i+1,1)==0){ $dizainesEtUnites = substr($partie[0],$nombreChiffres-$i+2,1);}
if ($dizainesEtUnites==0 && $centaines > 1)
{
$r = $r.$nombres_99[$centaines]." cent"; if ($i != 6) $r = $r."s "; else $r = $r." ";
}
else
{
if ($centaines == 1) $r = $r."cent ";
else
{
if ($centaines > 1) $r = $r.$nombres_99[$centaines]." cent ";
}
}
if ($dizainesEtUnites == 80 && $i != 6)
{
$r = $r.$nombres_99[$dizainesEtUnites]."s ".$unitesExp3[$i-3]."s ";
}
elseif ($dizainesEtUnites > 1)
{
$r = $r.$nombres_99[$dizainesEtUnites]." ".$unitesExp3[$i-3]; if ($i != 6) $r = $r."s "; else $r = $r." ";
}
elseif($dizainesEtUnites == 1)
{
if ($centaines > 0)
{
$r = $r.$nombres_99[$dizainesEtUnites]." ".$unitesExp3[$i-3]; if ($i != 6) $r = $r."s "; else $r = $r." ";
}
elseif ($i == 3)
{
$r = $r.$nombres_99[$dizainesEtUnites]." ".$unitesExp3[$i-3]; if ($partie[0] > 1) $r = $r."s";
}
else
{
$r = $r.$unitesExp3[$i-3]." ";
}
}
elseif ($dizainesEtUnites == 0 && $centaines > 0)
{
$r = $r.$unitesExp3[$i-3]; if ($i != 6) $r = $r."s "; else $r = $r." ";
}
elseif ($i >= 6 && substr($partie[0],$nombreChiffres-$i,$i) == 0)
{
$r = $r."d'".$unitesExp3[0]."s";
break;
}
elseif ($nombreChiffres-$i == 3 && substr($partie[0],$nombreChiffres-$i,$i) == 0)
{
$r = $r.$unitesExp3[0]."s";
break;
}
$i -= 3;
}
if ($partie[0] == 0) $r = $nombres_99[0]." ".$unitesExp3[0];
//on passe aux centimes
$centimes = substr($partie[1],0,2);
if (substr($partie[1],0,1)==0){ $centimes = substr($partie[1],1,1);}
if ($centimes != 0)
{
$r = $r." et ";
if ($centimes == 80)
{
$r = $r.$nombres_99[$centimes]."s ".$sousUnite."s";
}
elseif ($centimes > 1)
{
$r = $r.$nombres_99[$centimes]." ".$sousUnite."s";
}
elseif($centimes == 1)
{
$r = $r.$nombres_99[$centimes]." ".$sousUnite;
}
}
//on supprime les espaces de dйbut et de fin
$r1 = trim($r);
return($r);
}
echo '__ICI C\'EST BON__ ' .$totalEnLettres = sommeEnLettres(number_format('8887.87', 10, ',', ''),EUR);
?>
<br><br>
<?
echo '__MAIS LA PROBLEME AVEC 88__ ' .$totalEnLettres = sommeEnLettres(number_format('8888.88', 10, ',', ''),EUR);
?>
Configuration: Windows XP Firefox 1.5.0.12
4 réponses
-
Bonjour,
Espérons qu’il y a une personne fort en php pour nous aider -
meme adresse pour le test
cadeau pour toi :
<?php function sommeEnLettres($nombre,$devise) { //On cr?e un tableau avec les unit?s $unitesExp3 = array( 0 => 'euro', 3 => 'mille', 6 => 'million', 9 => 'milliard', 12 => 'billion', 15 => 'billiard', 18 => 'trillion', 21 => 'trilliard', 24 => 'quatrillion', 27 => 'quatrilliard', 30 => 'quintillion', 33 => 'quintilliard', 36 => 'sextillion', 39 => 'sextilliard', ); if($devise == "USD") $unitesExp3[0] = "dollar"; if($devise == "EUR") $sousUnite = "centime"; elseif($devise == "USD") $sousUnite = "cent"; //On cr?e un tableau avec les 99 (100 avec zero) premiers nombres $nombres_99 = array("zéro","un","deux","trois","quatre","cinq","six","sept","huit","neuf","dix","onze","douze","treize","quatorze","quinze","seize","dix-sept","dix-huit","dix-neuf","vingt"); $nombres_99[30] = "trente"; $nombres_99[40] = "quarante"; $nombres_99[50] = "cinquante"; $nombres_99[60] = "soixante"; $nombres_99[70] = "soixante-dix"; $nombres_99[71] = "soixante et onze"; $nombres_99[80] = "quatre-vingt"; for ($i=21;$i<=61;$i+=10) { $nombres_99[$i] = $nombres_99[$i - 1]." et un"; for ($j=1;$j<=8;$j++) { $k = $i + $j; $nombres_99[$k] = $nombres_99[$i - 1]."-".$nombres_99[$j + 1]; } } for ($i=72;$i<=79;$i++) { $nombres_99[$i] = "soixante-".$nombres_99[$i-60]; } for ($i=81;$i<=99;$i++) { $nombres_99[$i] = "quatre-vingt-".$nombres_99[$i-80]; } //On d?finit $r qui est le $nombre ?crit en lettres $r=""; //on recherche si ya une virgule $virg = strpos($nombre,",",1); //puis on cr?e un tableau avec la partie enti?re et la partie apr?s la virgule if ($virg == 0) { $partie[0] = $nombre; $partie[1] = "00"; } else { $partie = explode(",",$nombre); } //on regarde combien ya de chiffres dans chaque partie $nombreChiffres = strlen($partie[0]); //on fait en sorte qu'il y a un nombre de chiffres qui tombe sur un multiple de 3 pour les calculs if($nombreChiffres % 3 == 1) {$partie[0] = "00".$partie[0]; $nombreChiffres += 2;} elseif($nombreChiffres % 3 == 2) {$partie[0] = "0".$partie[0]; $nombreChiffres += 1;} $i = $nombreChiffres; while ($i>0) { $centaines = substr($partie[0],$nombreChiffres-$i,1); $dizainesEtUnites = substr($partie[0],$nombreChiffres-$i+1,2); if (substr($partie[0],$nombreChiffres-$i+1,1)==0){ $dizainesEtUnites = substr($partie[0],$nombreChiffres-$i+2,1);} if ($dizainesEtUnites==0 && $centaines > 1) { $r = $r.$nombres_99[$centaines]." cent"; if ($i != 6) $r = $r."s "; else $r = $r." "; } else { if ($centaines == 1) $r = $r."cent "; else { if ($centaines > 1) $r = $r.$nombres_99[$centaines]." cent "; } } if ($dizainesEtUnites == 80 && $i != 6) { $r = $r.$nombres_99[$dizainesEtUnites]."s ".$unitesExp3[$i-3]."s "; } elseif ($dizainesEtUnites > 1) { $r = $r.$nombres_99[$dizainesEtUnites]." ".$unitesExp3[$i-3]; if ($i != 6) $r = $r."s "; else $r = $r." "; } elseif($dizainesEtUnites == 1) { if ($centaines > 0) { $r = $r.$nombres_99[$dizainesEtUnites]." ".$unitesExp3[$i-3]; if ($i != 6) $r = $r."s "; else $r = $r." "; } elseif ($i == 3) { $r = $r.$nombres_99[$dizainesEtUnites]." ".$unitesExp3[$i-3]; if ($partie[0] > 1) $r = $r."s"; } else { $r = $r.$unitesExp3[$i-3]." "; } } elseif ($dizainesEtUnites == 0 && $centaines > 0) { $r = $r.$unitesExp3[$i-3]; if ($i != 6) $r = $r."s "; else $r = $r." "; } elseif ($i >= 6 && substr($partie[0],$nombreChiffres-$i,$i) == 0) { $r = $r."d'".$unitesExp3[0]."s"; break; } elseif ($nombreChiffres-$i == 3 && substr($partie[0],$nombreChiffres-$i,$i) == 0) { $r = $r.$unitesExp3[0]."s"; break; } $i -= 3; } if ($partie[0] == 0) $r = $nombres_99[0]." ".$unitesExp3[0]; //on passe aux centimes $centimes = substr($partie[1],0,2); if (substr($partie[1],0,1)==0){ $centimes = substr($partie[1],1,1);} if ($centimes != 0) { $r = $r." et "; if ($centimes == 80) { $r = $r.$nombres_99[$centimes]."s ".$sousUnite."s"; } elseif ($centimes > 1) { $r = $r.$nombres_99[$centimes]." ".$sousUnite."s"; } elseif($centimes == 1) { $r = $r.$nombres_99[$centimes]." ".$sousUnite; } } //on supprime les espaces de d?but et de fin $r1 = trim($r); return($r); } // affichage a supprimer a partir de cette ligne .... echo '<br> test 196.988,92 __ ' .$totalEnLettres = sommeEnLettres(number_format('196988.92', 10, ',', ''),EUR) .'<br>'; for ($test=0;$test<=250;$test++) { echo '<br> test'. $test . ' __ ' .$totalEnLettres = sommeEnLettres(number_format(''.$test.'', 10, ',', ''),EUR); } ?> -
Bonjour,
Je vous remercie et je vous dit bravo c’est parfait
Merci encore -
si ca peut te rassurer... y'a pas qu'avec 88 que ca buggue...
http://auboutdumonde.freezee.org/test.php
j'ai pas la tete a chercher, mais te focalise pas sur 88 seulement, mais sur TOUS les chiffres pairs entre 82 et 98
ps : la prochaine fois, entoure ton code des balises < code></code> !