Nombre En Lettres -Probleme avec 88 !-

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);
?>

4 réponses

Akim13 Messages postés 60 Statut Membre 2
 
Bonjour,

Espérons qu’il y a une personne fort en php pour nous aider
0
gryzzly Messages postés 5220 Date d'inscription   Statut Contributeur Dernière intervention   1 336
 
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);

}
?>
0
Akim13 Messages postés 60 Statut Membre 2
 
Bonjour,

Je vous remercie et je vous dit bravo c’est parfait

Merci encore
0
gryzzly Messages postés 5220 Date d'inscription   Statut Contributeur Dernière intervention   1 336
 
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> !
-1