Forum Clubic

Séparateur de décimales

Salut à tous

Dans un script PHP, je récupère des données depuis une base de données MySQL (via un objet PEAR DB_DataObject), et quand je veux afficher un float, j’ai un problème avec le séparateur

Bon, déjà, il faut savoir que je "setlocale(LC_ALL,‘fr_FR.UTF-8’) " au début de ce script (enfin au début de chaque script de l’application), afin justement d’avoir une virgule comme séparateur sur l’affichage des nombres à virgule, de plus, mais je ne pense pas que ça entre en ligne de compte, j’utilise smarty comme moteur de templates

En fait, quand j’affiche un float directement récupéré de MySQL, il l’affiche avec un point comme séparateur, et dès que je travaille sur un de ces float (le multiplier par 1 par exemple) à l’affichage il me met une virgule

Je pense donc que l’objet PEAR DB_DataObject considère la valeur comme une chaine et quand je travaille dessus, il la transforme en float, or, cette chaine est retournée par MySQL, il me semble donc que ce problème est dû au réglage des locales dans MySQL, mais je n’ai pas trouvé comment le changer (j’ai juste vu le réglage de l’“interclassement”, mais je ne sais pas si c’est le but de ce réglage, et surtout, il y a pleins de langues disponibles, mais pas “français”, et je n’ai pas trouvé d’autres langues qui utilisent la virgule comme séparateur)

Bref, je voulais donc un peu vos avis sur la question, si j’ai bien localisé le problème, et si possible des éléments de réponse sur sa solution

Merci d’avance

Tu utilises quel type dans mySQL?

VARCHAR? ou DECIMAL?

Et donc, si tu fais floatval(trucmysql) ça passe?

Dans mysql, il est déclaré sous le type “float”

floatval fait en effet mettre une virgule comme séparateur à PHP (tout comme $monobjet->monchamps *= 1) mais pour des raisons de commodité de développement, j’aimerais bien ne pas avoir à le faire, justement

fr3.php.net…

T’as pas trop le choix malheureusement.

Bon, ok pour le principe, ça recoupe donc ma théorie sur le problème, merci bien

Mais par exemple, quand on transforme un float PHP en chaine, ne serait-ce qu’à l’affichage, il se fie aux informations des locales pour savoir s’il doit mettre un point ou une virgule comme séparateur, ma question principale est de savoir s’il y a un mécanisme similaire au niveau de MySQL, en fait

Sûrement :slight_smile: je ne le connais pas assez ceci dit.