Page 1 sur 1
Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 10:52
par scanab
La fonction round() effectue un ceil() au lieu d'un arrondi.
Il est facile de le vérifier avec le testeur d'expression dans le module scénario.
Lorsque l'on teste l’expression
le résultat est
2
alors que le résultat attendu est 1...
Re: Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 11:32
par loic
Bonjour,
C'est une fonction php pas jeedom, voila la documentation
http://php.net/manual/fr/function.round.php
Re: Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 12:13
par scanab
Il doit bien y avoir un soucis quand même...
Si je prends le 1er exemple du lien que tu donne
voici le résultats dans l'évaluateur d'expression de jeedom :
Re: Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 13:55
par scanab
Après investigation le problème est dans la fonction round($_value, $_decimal = 0) du fichier scenarioExpression.class.php
Code : Tout sélectionner
if ($_decimal == 0) {
return ceil(floatval(str_replace(',', '.', $result)));
} else {
return round(floatval(str_replace(',', '.', $result)), $_decimal);
}
Je ne comprends vraiment pas l’intérêt de ce test... d'autant plus qu'il renvoie un résultat potentiellement faux si on veux un arrondi à l'unité... Pour moi, il devrait juste y avoir
Code : Tout sélectionner
return round(floatval(str_replace(',', '.', $result)), $_decimal);
Re: Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 14:44
par loic
Alors je sais pas ça a du être une demande d'un utilisateur ou fait par quelqu'un en pr je sais pas du tout. Pour moi il n'y avait pas de fonction round dans jeedom même car pas d’intérêt.
Re: Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 15:55
par scanab
loic a écrit : ↑21 déc. 2018, 14:44
Alors je sais pas ça a du être une demande d'un utilisateur ou fait par quelqu'un en pr je sais pas du tout. Pour moi il n'y avait pas de fonction round dans jeedom même car pas d’intérêt.
Mais faudrait pas l'appeler round dans ce cas... C'est quand même bizarre de faire un round sauf quand on ne demande pas de décimales où dans ce cas on fait un ceil... Tu ne pense pas ?
Re: Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 16:09
par loic
Oui oui je suis 100% d'accord avec toi mais malheureusement je n'ai pas la motivation de faire le changement, ca va encore faire plein de sujet sur le forum car ya un changement qui impacte ceux qui se servent de la fonction.
Re: Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 16:21
par scanab
Je te comprends...
Tu pourrait le faire autrement : pourquoi ne pas faire une autre fonction genre realRound() qui ferait vraiment un round ? Comme ça pas de régressions ! Avec bien sur de bons commentaires expliquant bien pourquoi chacune de ces fonctions existe
Re: Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 16:28
par scanab
et mieux encore, tu ajoute dans la fonction round() "originale" un message d'avertissement disant à l'utilisateur qu'il utilise une fonction dépréciée qui sera supprimée dans une future version...
Re: Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 16:30
par loic
Je doute que les utilisateurs le vois car ça serait dans les logs du scénario.... L'idéal ça serait juste de la supprimer cette fonction n'a aucun raison d'etre mais bon pas envie de gérer les retours
Re: Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 16:36
par scanab
OK, je pensais à un message jeedom dans l'interface...
Mais à minima, créer une fonction realRound() pour avoir au moins la possibilité d'avoir un arrondi réel, ce serait possible ?
Re: Résultat de la fonction round() erroné
Publié : 21 déc. 2018, 16:46
par loic
Je vais voir je préférais vraiment supprimer l'autre fonction en faite.
Re: Résultat de la fonction round() erroné
Publié : 22 déc. 2018, 15:47
par scanab
Je ne peux qu'etre d'accord avec toi
Re: Résultat de la fonction round() erroné
Publié : 03 févr. 2019, 18:51
par Swr
Bonjour,
J'utilise de + en + la fonction round() dans les messages vocaux pour informer d'une distance, temps.. mais le problème de l'arrondi supérieur est gênant.
Quid de la demande de scanab pour avoir une fonction realRound() ?
Quelqu’un a t'il trouvé une solution pour faire un arrondi ?
Re: Résultat de la fonction round() erroné
Publié : 05 févr. 2019, 11:17
par cadavor
J'avais relevé ce comportement il y a pas mal de temps déjà :
viewtopic.php?f=23&t=38942&p=639183
Re: Résultat de la fonction round() erroné
Publié : 11 févr. 2019, 20:53
par rjcb
Hello,
Je rebondi la dessus, alors comment faire pour avoir une seule décimale ?
J'avais l'habitude d'utiliser round mais appliqué a une division cela n'a pas l'aire de fonctionner ?
- Screenshot 2019-02-11 at 20.50.28.png (80.93 Kio) Consulté 5244 fois
- Screenshot 2019-02-11 at 20.50.02.png (88.16 Kio) Consulté 5244 fois
Re: Résultat de la fonction round() erroné
Publié : 02 mars 2019, 19:01
par SBO
@rjcb la fonction bug et elle interprète le "/"
tu peux essayé en modifiant la fin de ton calcul par :
Attention si un jour la fonction est corrigée dans le core, ton calcul pourrait ne plus fonctionner.
Re: Résultat de la fonction round() erroné
Publié : 03 mars 2019, 11:34
par loic
Bonjour,
Ca sera corrigé en 4.X
Re: Résultat de la fonction round() erroné
Publié : 18 mai 2019, 00:10
par fishes
Salut
Je sais pas si qqn l’a déjà évoqué mais il est possible de contourner l’arrondi mal réalisé par la fonction round sans pour autant créer une nouvelle fonction.
Perso je fais round(#value#-0.5,0)
Exemple si valeur = 52,4. Round retourne 53. Après application de la formule on obtient bien 52.
@+