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 :

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;
}
Ceci me donne en logs :
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.