webleads-tracker

pourquoi round me renvoie une virgule ?

Vincent StartUp
Avatar
Bonjour à tous,

Une question très con, mais je préfère la poser après avoir perdu pas mal de temps sur un problème de conversion (non ! ne rigolez pas de moi). Pour les nombres avec décimales, que ce soit dans la bdd ou en php il faut travailler avec des points. Par contre les fonctions round ou floatval renvoient des nombres avec une virgule alors qu'elle n'accepte que le point.
            
echo round("12.34",2);//=>12,34
echo round("12,34",2);//=>12
//idem avec floatval
echo floatval("12.34");//=>12,34
echo floatval("12,34");//=>12
 


Je suis un peu étonné de ce comportement, est-ce normal ?
Vincent - StartUp Communication

Seb - iNCiTE Web
Avatar
Salut Vincent,

En effet après un essai sur un autre serveur, ces fonctions renvoient bien un point et non pas une virgule.
Cela dépend des informations de localisation définies par setlocale, plus précisément LC_NUMERIC

Extrait de http://fr2.php.net/round

Please note that the format of this functions output also depends on your locale settings. For example, if you have set your locale to some country that uses commas to separate decimal places, the output of this function also uses commas instead of dots.

This might be a problem when you are feeding the rounded float number into a database, which requires you to separate decimal places with dots.

See it in action:
<?php
    echo round('3.5558', 2);
    setlocale(constant('LC_ALL'), 'et_EE.UTF-8');
    echo '<br />'. round('3.5558', 2);
?>

The output will be:
3.56
3,56
www.inciteweb.com

Vincent StartUp
Avatar
Salut Seb, merci pour ton retour.

Le test que tu as fait c'est sur un serveur Medialibs ?

A+
Vincent - StartUp Communication

Seb - iNCiTE Web
Avatar
Salut

Non c'est un serveur dédié OVH...
www.inciteweb.com

Vincent StartUp
Avatar
Et sur un medialibs, ça renvoie la même chose que moi ?
Vincent - StartUp Communication

Vincent StartUp
Avatar
Bonjour,

Est-ce que quelqu'un pourrait faire le test sur un serveur medialibs ?
Est-ce que si j'utilise la fonction setlocale ça peut être perturbant pour les autres scripts du même site, du serveur ?

A+
Vincent - StartUp Communication

Seb - iNCiTE Web
Avatar
Salut

Arf, tu comptais sur le forum pour avoir une réponse ;-)) ou plutôt :-((

Voici ce ça me renvoie (dans un script spécif, une page de Manage)
12,34
12
12,34
12


Le setlocale n'a aucun effet... mais peut être qu'il faut le faire côté public.
www.inciteweb.com

Vincent StartUp
Avatar
Merci pour ton retour,

Tu as la même chose que moi, ça me rassure un peu.

Je fais un import de tarif en spécifique, et il y a plusieurs calculs, et à chaque fois je suis obligé de faire du str_replace(',','.'...), c'est assez galère mais ça fonctionne. Si quelqu'un de pointu en php passe par là...
Vincent - StartUp Communication

Thomas [LE KLUB]
Avatar
Salut Vincent,

Alors en théorie Seb a raison, l'utilisation de setlocale() marche bien, après le labo a peu être empêché la modification de certaines configs par ce biais là, ce qui expliquerait cette inefficacité...

J'ai rencontré le problème il y a un certain temps et j'en étais resté au str_replace x)

Bonne journée,
Thomas

Vincent StartUp
Avatar
Le setlocale me fait un peu peur dans emajine car je ne sais pas les incidences que ça pourrait avoir sur le reste. Je reste pour l'instant sur le str_replace (mes dev sont tous comme ça).

Si le labo pourrait m'en dire un peu plus...
Vincent - StartUp Communication