Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1478 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [résolu] Truc de dingue : float écrits avec un . ou une ,

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] Truc de dingue : float écrits avec un . ou une ,

n°2331194
rufo
Pas me confondre avec Lycos!
Posté le 02-04-2019 à 13:58:15  profilanswer
 

Bonjour à tous,
Je viens de tomber sur un truc de dingue sur une appli web en PHP/Mysql/HTML/CSS/Javascript que je suis en train de modifier. A un moment dans mon code, je mets dans une variable PHP de type tableau associatif 2 nombres float (ex : 47.526 et 1.74). J'utilise ensuite cet array pour initialiser 2 variables javascript, le code javascript étant généré par PHP. Ca donne un truc du genre :

Code :
  1. $Point = array('lat' => 47.526, 'lng' => 1.74);
  2. echo <<<EOT
  3. <script type="text/javascript">
  4.     var centerLat = {$Point['lat']};
  5.     var centerLng = {$Point['lng']};
  6. </script>
  7. EOT;


Bien entendu, la partie Javascript contient bien plus de lignes mais c'est sans rapport avec mon pb.
 
Mon problème est le suivant : de temps en temps, j'ai un msg d'erreur sur mon Javascript au niveau de ma variable centerLat. Quand j'affiche le code source de la page HTML générée dans ce cas, j'ai :
var centerLat = 47,526;
var centerLng = 1,74;
 
Au lieu de :  
var centerLat = 47.526;
var centerLng = 1.74;
La plupart du temps, j'ai mes floats avec le . et non la virgule. Il suffit que je fasse un F5 de ma page pour retrouver mes float écrits avec un .! :pt1cable: Une idée de ce qui peut provoquer un tel comportement ? Parce que j'avais déjà vu ce type de différence entre 2 serveurs, mais ça venait de la configuration de la représentation des décimales sur le serveur qui différait de l'un à l'autre. Mais là, c'est sur un wampserver. Donc, la conf reste identique. C'est vraiment très bizarre ce bagottement :/


Message édité par rufo le 02-04-2019 à 16:48:20

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 02-04-2019 à 13:58:15  profilanswer
 

n°2331195
rufo
Pas me confondre avec Lycos!
Posté le 02-04-2019 à 14:22:39  profilanswer
 

Bon, sur la page de setlocale() ( https://www.php.net/manual/fr/function.setlocale.php ) j'ai vu un avertissement. Mais c'est bizarre, j'ai pas d'autre script qui tourne sur mon wampserveur qui pourrait faire un setlocale() :/
Du coup, c'est quoi la méthode "propre" pour garantir que j'ai mes floats écrits avec un . et non une , ? Je passe par un str_replace ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2331196
MaybeEijOr​Not
but someone at least
Posté le 02-04-2019 à 15:21:11  profilanswer
 

Au niveau du bug, je me dirigerai vers le fait que quand tu rafraichies tu utilises un cookie et donc des appels de méthodes du genre datetime ou vice versa. Bref entre le cas avec et sans cookie tu dois avoir un appel explicite ou implicite d'un paramétrage de setlocale.

 

D'après une recherche, sans approfondir, la solution, la plus adaptée serait d'utiliser number_format().


Message édité par MaybeEijOrNot le 02-04-2019 à 15:21:20

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2331201
rufo
Pas me confondre avec Lycos!
Posté le 02-04-2019 à 15:41:24  profilanswer
 

J'ai effectivement utilisé number_format(). Mais bizarre : impossible de trouver où setlocale() est appelée. Or, j'ai qu'une appli. L'avertissement semble indiquer sur Windows, ça peut venir d'autres choses et pas uniquement de PHP...
J'ai fait un test : en début de script, je fais un setlocale() avec un '.' et quand j'affiche les paramètres locaux via localeconv() j'ai bien mon '.'. Plus loin dans le script, je refais un localeconv() et là, j'ai un ',' :(


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2331204
MaybeEijOr​Not
but someone at least
Posté le 02-04-2019 à 16:09:27  profilanswer
 

Je te dis, je pense que certaines méthodes font des appels implicites de setlocale. Je dis ça d'instinct, faudrait vérifier, mais ça ne m'étonnerait pas que des méthodes qui font optionnellement du formatage ou de la conversion de type fassent un appel implicite de setlocale ou trifouille la mémoire à ce niveau.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2331206
rufo
Pas me confondre avec Lycos!
Posté le 02-04-2019 à 16:11:32  profilanswer
 

Ok, tu parles de fonctions natives de php et non de fonctions appelées dans des scripts php. Effectivement, dans ce cas, je ne pourrai pas le voir (autrement qu'en explorant le code source des fonctions natives de PHP, chose que je ne ferai pas).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2331209
MaybeEijOr​Not
but someone at least
Posté le 02-04-2019 à 16:16:17  profilanswer
 

Oui je parles des fonctions natives de PHP, sans fouiller comment sont codées ces fonctions, il reste la possibilité de regarder le comportement avec et sans en les isolant dans un autre script.
Mais comme toi, j'ai la flemme, surtout que moi je ne connais pas les fonctions que tu utilises et qu'on pourrait incriminer. Puis faut lancer un serveur. :o


Message édité par MaybeEijOrNot le 02-04-2019 à 16:16:46

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2331217
rufo
Pas me confondre avec Lycos!
Posté le 02-04-2019 à 16:48:08  profilanswer
 

Au final, avec number_format(), j'ai résolu mon pb, mais c'est la première fois que je tombe sur un tel pb depuis que je code en PHP (2002!) :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2331219
MaybeEijOr​Not
but someone at least
Posté le 02-04-2019 à 16:59:50  profilanswer
 

L'autre jour je me suis fait piégé par un &$val dans un foreach que je n'avais pas unset en sortie de boucle, je me suis bien arraché les cheveux. :fou:


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2331266
rufo
Pas me confondre avec Lycos!
Posté le 03-04-2019 à 10:03:58  profilanswer
 

J'ai utilisé la syntaxe echo <<<EOT parce que j'ai un gros morceau de Javascript à insérer dans ma page qui comporte à quelques endroits l'insertion de variables PHP. Du coup, faire pleins de echo, c'est relou. D'habitude, j'utilise très peu la syntaxe echo <<<EOT.
 
Mais quand je peux, je ferai le test.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 03-04-2019 à 10:03:58  profilanswer
 

n°2331267
MaybeEijOr​Not
but someone at least
Posté le 03-04-2019 à 10:15:10  profilanswer
 

Pour moi, l'intérêt de cette syntaxe ce n'est pas le fait d'utiliser plus ou moins de echo (pour moi tu en utilises le même nombre) mais le fait de ne pas se compliquer avec l'échappement de certains caractères (entre autre les guillemets) et d'éviter éventuellement des concaténations.


Message édité par MaybeEijOrNot le 03-04-2019 à 10:16:21

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [résolu] Truc de dingue : float écrits avec un . ou une ,

 

Sujets relatifs
texte decalé dans div en floatCentrage float etc... :D
Import module ou module.truc ou import*[Résolu]Float et écriture scientifique
[Resolu  ]Stack over flow : calcul avec long_long_floatObjet en float et listes à puces
Extraire du float d'un fichier en .txtun truc de fou
Comment on enlève ce truc sur Symfony ?Requete: "CREATE TABLE truc LIKE Machin" Erreur de syntaxe !! ?
Plus de sujets relatifs à : [résolu] Truc de dingue : float écrits avec un . ou une ,


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR