sacha | Voila mon script PHP de conversion de valeurs monétaires.
C'est à dire qu'il permet, avec une donnée chiffrée formatée spécifiquement, d'avoir en sortie la meme donnée chiffrée mais sans formatage.
Exemple concret:
ca enleve les espaces:
"134 465.25" --> 134465.25
ou ca les rajoutes:
"123456789.11" --> "123 456 879.25"
en prenant compte du fait qu'il y ait ou non des centimes, donc un caractère "." et deux caractères de chiffres a la fin.
La première conversion ( avec --> sans) marche bien.
Mon problème se situe sur la deuxième :
par exemple "123546789.25" me renvoie "123 546789 789 .25" et non la valeur escomptée ("123 546 789.25" )
j'ai beau cherché dans ma fonction (function add_spaces($nb))je vois pas trop où est le problème... mais bon, vous connaissez le debuggage, on cherche, on cherche pendant 1h, et le collègue d'à côté qui vient regarder le problème trouve la solution en 30 secondes... les joies du débugging quoi
Donc si vous pouvez jeter un oeil 30 secondes (voire plus ) sur ce code et trouver une solution ca m'arrangerait bien la vie... Le script exécutable est accessible ici
http://sacha.planet-d.net/space.php
Au fait pour ceux qui ne connaissent pas debuglib.php, que j'utilise dans cette page, c'est un script php super pratique qui liste toutes les variables globales de votre page, quelque soit le type de données, ainsi que les var de sessions, les vars _SERVER, cookies,etc. et qui est on ne peut + simple à installer : downloader debuglib.php (un coup de google et c réglé), insérer include "debuglib.php"; au début du fichier, et après un coup de show_vars(); dans le corps html et le tour est joué !
le code source :
Code :
- <?
- include "debuglib.php";
- $dbg_valeur = 0;
- function add_spaces($nb)
- {
- $nb = trim($nb); // on enleve les espaces avant et apres
- $pos = strrpos($nb, "." ); // si il y a un point : renvoie sa position
- if (!$pos) // si non : renvoie 0 ...
- {
- $nb_entier = $nb; //... et la partie entière est tout le nombre ...
- $cents = ""; $point = ""; // et ya pas de centime.
- }
- else // oui > $pos = la position du point dans la valeur
- {
- $longueur = strlen($nb);
- $ch = explode(".",$nb);
- $nb_entier = $ch[0];
- $cents = $ch[1];
- $point = ".";
- }
- $str_final = "";
- $i=0;
- $longueur = strlen($nb_entier); // si nb_entier=123456 : longueur = 6
- $div = $longueur/3; // renvoie 2 dans ce cas, ou si longueur = 7 : 2.33333 avec un reste
- $nb_de_boucles = floor($div); // si $div = 2.333 : nb boucles = 2 (on arrondit en dessous)
- $fin = $longueur;
- while($nb_de_boucles)
- {
- $str_tmp = substr($nb_entier,$longueur-3-(3*$i),$longueur-(3*$i));
- $valeur[$nb_de_boucles] = substr($nb_entier,$fin-3,$fin); // for debug only
- $str_final = $str_tmp . " ". $str_final;
- $fin -= 3;
- $i++;
- $nb_de_boucles--;
- }
- $dbg_valeur = print_r($valeur);
- for($i=1;$i<=floor($div);$i++)
- {
- $str_final.= " ".$valeur['$i'];
- }
- $nb_entier = trim($str_final);
- /*
- if(fmod($longueur,3)) // si il y a un reste a $longueur/3
- {
- $fin = $longueur-(3*$i);
- $chiffres = substr($nb_entier,0,$fin);
- $str_final = $chiffres " " . $str_final;
- }
- */
- $resultat = $str_final . $point . $cents; // "45778" "." "25" ou "45778" "" ""
- return $resultat;
- }
- // c fait & ca march
- function remove_spaces($nb)
- {
- $nb = trim($nb); // on enleve les espaces avant et apres
- $pos = strrpos($nb, "." ); // si il y a un point : renvoie sa position
- if (!$pos) // si non : renvoie 0
- {
- $nb_entier = $nb;
- $cents = ""; $point = ""; // pas de centime
- }
- else
- {
- $longueur = strlen($nb);
- $ch = explode(".",$nb);
- $nb_entier = $ch[0];
- $cents = $ch[1];
- $point = ".";
- }
- $tmp = eregi_replace('[^0-9]',"",$nb_entier); // supression sauf chiffres
- $tmp = $tmp . $point . $cents;
- return $tmp; // "45778" "." "25" ou "45778" "" ""
- }
- if($remove == 1)
- $result_sans_espace = remove_spaces($value);
- if($add == 1)
- $result_avec_espace = add_spaces($value);
- ?>
- <html>
- <head>
- <title>add_spaces & remove_spaces TEST</title>
- <style type="text/css">
- <!--
- .tablo {
- border: thin dotted #CCCCCC;
- }
- -->
- </style>
- </head>
- <body>
- <div align="center"><a href="space.php"><font size="2" face="Arial, Helvetica, sans-serif">CLEAR</font></a></div>
- <table width="75%" border="0" align="center">
- <tr>
- <td class="tablo">
- <FORM name="remove"><div align="center">
- <input type="hidden" name="remove" value="1">
- avec espaces :
- <input type="text" name="value" value="">
- <br>
- <?
- if($remove)
- echo " sans espace : ". $result_sans_espace;
- ?>
- <br>
- <input type="submit" name="submit" value="CONVERTIR">
- </div></FORM>
- </td>
- </tr>
- <tr>
- <td class="tablo">
- <FORM name="add">
- <div align="center"> sans espace :
- <input type="hidden" name="add" value="1">
- <input name="value" type="text" id="value" value=""><br>
- <?
- if($add)
- echo " avec espaces : ". $result_avec_espace;
- ?>
- <br>
- <input type="submit" name="submit" value="CONVERTIR"></div></FORM>
- </td>
- </tr>
- </table>
- <? show_vars(); ?>
- </body></html>
|
Merci les coderz ! Message édité par sacha le 06-05-2003 à 23:07:01
|