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);
?>
Configuration: Windows XP
Firefox 1.5.0.12

4 réponses

  1. Akim13 Messages postés 60 Statut Membre 2
     
    Bonjour,

    Espérons qu’il y a une personne fort en php pour nous aider
    0
  2. gryzzly Messages postés 5220 Date d'inscription   Statut Contributeur Dernière intervention   1 340
     
    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
  3. Akim13 Messages postés 60 Statut Membre 2
     
    Bonjour,

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

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