Bonjour,
Je rencontre le problème suivant : pour une application comptable, ma base de donnée contient des tarifs et à partir de ceux-ci je créé des lignes de quittance.
Tout se passe bien la plupart du temps mais je rencontre parfois un problème de virgule :
au lieu de travailler sur une donnée au format decimal Americain ###.##
le script se met à travailler avec une donnée au format francais : ###,## ce qui entraine des erreurs de calcul et la plupart du temp une donnée à zéro.
Ne comprenant pas d'où vient l'erreur, j'ai tenté de remplacer la virgule par un point mais rien n'y fait, je me retrouve avec des virgules partout !
Voici le bout de code qui ne va pas :
Ceci me donne en logs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Logger('Prime OK '.$Prime); $Prime = Math::certifyFloat($Prime); Logger('Prime converted '.$Prime); // ET LA FONCTION certifyFloat : function certifyFloat($SupposedFloat) { $certifiedFloat=(preg_replace("/,/",".",$SupposedFloat)); $certifiedFloat=floatval(preg_replace("/^[^0-9\.]/","",$certifiedFloat)); return $certifiedFloat; }
20110826 15:07:05 Prime OK 9,9
20110826 15:07:05 Prime converted 9,9
Le pire étant que l'utilisateur recevant une erreur n'a qu'a relancer l'opération pour ca marche bien :
20110826 15:07:23 Prime OK 9.9
20110826 15:07:23 Prime converted 9.9
L'opération est effectuée +-3000 fois par jour et survient d'une à cinq fois par jour.
La version de php est la 5.3.5.0 sur un windows 2008 server R2 (ca faisait pareil en 2003). L'appli tourne sous symfony 1.0.11.
ANY IDEA ?
D'avance merci.
Partager