Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Résultat de la fonction round() erroné

Répondre
Avatar de l’utilisateur
scanab
Actif
Messages : 914
Inscription : 30 juil. 2014, 15:15

Résultat de la fonction round() erroné

Message par scanab » 21 déc. 2018, 10:52

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

Code : Tout sélectionner

round(1.1,0)
le résultat est
2
alors que le résultat attendu est 1...
Développeur des plugins :

Avatar de l’utilisateur
loic
Administrateur
Messages : 14862
Inscription : 01 févr. 2014, 16:21

Re: Résultat de la fonction round() erroné

Message par loic » 21 déc. 2018, 11:32

Bonjour,
C'est une fonction php pas jeedom, voila la documentation http://php.net/manual/fr/function.round.php
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

Avatar de l’utilisateur
scanab
Actif
Messages : 914
Inscription : 30 juil. 2014, 15:15

Re: Résultat de la fonction round() erroné

Message par scanab » 21 déc. 2018, 12:13

Il doit bien y avoir un soucis quand même...
Si je prends le 1er exemple du lien que tu donne

Code : Tout sélectionner

<?php
echo round(3.4);         // 3
[...]
?>
voici le résultats dans l'évaluateur d'expression de jeedom :

Code : Tout sélectionner

round(3.4) = 4
Développeur des plugins :

Avatar de l’utilisateur
scanab
Actif
Messages : 914
Inscription : 30 juil. 2014, 15:15

Re: Résultat de la fonction round() erroné

Message par scanab » 21 déc. 2018, 13:55

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);
Développeur des plugins :

Avatar de l’utilisateur
loic
Administrateur
Messages : 14862
Inscription : 01 févr. 2014, 16:21

Re: Résultat de la fonction round() erroné

Message par loic » 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.
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

Avatar de l’utilisateur
scanab
Actif
Messages : 914
Inscription : 30 juil. 2014, 15:15

Re: Résultat de la fonction round() erroné

Message par scanab » 21 déc. 2018, 15:55

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 ?
Développeur des plugins :

Avatar de l’utilisateur
loic
Administrateur
Messages : 14862
Inscription : 01 févr. 2014, 16:21

Re: Résultat de la fonction round() erroné

Message par loic » 21 déc. 2018, 16:09

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.
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

Avatar de l’utilisateur
scanab
Actif
Messages : 914
Inscription : 30 juil. 2014, 15:15

Re: Résultat de la fonction round() erroné

Message par scanab » 21 déc. 2018, 16:21

:lol:
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 :D
Développeur des plugins :

Avatar de l’utilisateur
scanab
Actif
Messages : 914
Inscription : 30 juil. 2014, 15:15

Re: Résultat de la fonction round() erroné

Message par scanab » 21 déc. 2018, 16:28

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...
Développeur des plugins :

Avatar de l’utilisateur
loic
Administrateur
Messages : 14862
Inscription : 01 févr. 2014, 16:21

Re: Résultat de la fonction round() erroné

Message par loic » 21 déc. 2018, 16:30

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
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

Avatar de l’utilisateur
scanab
Actif
Messages : 914
Inscription : 30 juil. 2014, 15:15

Re: Résultat de la fonction round() erroné

Message par scanab » 21 déc. 2018, 16:36

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 ?
Développeur des plugins :

Avatar de l’utilisateur
loic
Administrateur
Messages : 14862
Inscription : 01 févr. 2014, 16:21

Re: Résultat de la fonction round() erroné

Message par loic » 21 déc. 2018, 16:46

Je vais voir je préférais vraiment supprimer l'autre fonction en faite.
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

Avatar de l’utilisateur
scanab
Actif
Messages : 914
Inscription : 30 juil. 2014, 15:15

Re: Résultat de la fonction round() erroné

Message par scanab » 22 déc. 2018, 15:47

Je ne peux qu'etre d'accord avec toi :lol:
Développeur des plugins :

Swr
Actif
Messages : 707
Inscription : 08 nov. 2016, 20:56
Localisation : 44

Re: Résultat de la fonction round() erroné

Message par Swr » 03 févr. 2019, 18:51

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 ?

Avatar de l’utilisateur
cadavor
Actif
Messages : 1284
Inscription : 21 juin 2015, 22:00
Localisation : 34

Re: Résultat de la fonction round() erroné

Message par cadavor » 05 févr. 2019, 11:17

J'avais relevé ce comportement il y a pas mal de temps déjà :
viewtopic.php?f=23&t=38942&p=639183
Jeedom Stable 3.3
NUC Z83 + Aeotec Z-Stick Gen5
Z-Wave FGR + FGMS + FGDS + FGFS + FGK + FGWPE + ZW062 + ZW080
GH Mini + Orvibo AllOne + Playbulb + Miband2

rjcb
Actif
Messages : 522
Inscription : 13 oct. 2015, 10:27
Localisation : Rennes

Re: Résultat de la fonction round() erroné

Message par rjcb » 11 févr. 2019, 20:53

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
Screenshot 2019-02-11 at 20.50.28.png (80.93 Kio) Consulté 4964 fois
Screenshot 2019-02-11 at 20.50.02.png
Screenshot 2019-02-11 at 20.50.02.png (88.16 Kio) Consulté 4964 fois
:P
JEEDOM Mini+ compatible Z-Wave+ (2.4.6)
JEEDOM Jessie Master sur VM (2.4.6)

Avatar de l’utilisateur
SBO
Actif
Messages : 1371
Inscription : 17 sept. 2014, 18:31

Re: Résultat de la fonction round() erroné

Message par SBO » 02 mars 2019, 19:01

@rjcb la fonction bug et elle interprète le "/"

tu peux essayé en modifiant la fin de ton calcul par :

Code : Tout sélectionner

.......#)\/2),1)
Attention si un jour la fonction est corrigée dans le core, ton calcul pourrait ne plus fonctionner.
Ex-Bêta-Testeur | Jeedom | VM Debian 9

Pas de logs, pas d'infos, pas de réponse possible

Charte du forum | Doc jeedom | Trucs et astuces

Avatar de l’utilisateur
loic
Administrateur
Messages : 14862
Inscription : 01 févr. 2014, 16:21

Re: Résultat de la fonction round() erroné

Message par loic » 03 mars 2019, 11:34

Bonjour,
Ca sera corrigé en 4.X
Aide nous à t'aider : mets des logs, détaille ton soucis... Vous n'aurez aucune réponse de ma part si votre demande n'est pas détaillée (log, capture d'écran lisible...) ou si vous ne postez pas dans la bonne section

fishes
Timide
Messages : 68
Inscription : 10 nov. 2017, 09:45
Localisation : Brumath (67)

Re: Résultat de la fonction round() erroné

Message par fishes » 18 mai 2019, 00:10

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.

@+

Répondre

Revenir vers « Suggestions pour le Core »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 0 invité