[Expression] ! pour les connaisseurs!

Parce que tu le balance bien en nombre à symfony et pas en string. Mais quand çà vient du testeur ou de la db (d’une expression d’un scenario) c’est un string.

On est donc bien d’accord sur ce point :wink:

Je ne connais pas du tout les internes de Jeedom mais est-ce possible d’avoir le code suivant ?
Si oui, cela permet un cast automatique de ta string en nombre et le résultat sera alors cohérent

var_dump(testExpression('1e-2' + 0));
var_dump(testExpression(floatval('2.0E-6' + 0)+1));

[EDIT]
Je viens de faire le test directement dans le testeur d’expression de Jeedom et cela marche sans problème. Le résultat est conforme et j’obtiens bien des nombres

Requirement:

En l’état on peux pas upgrader Symfony sans mettre des milliers de Jeedom en carafe … :thinking:
Ou alors une version différente en fonction de la version de php.

Si tant est que çà résolve les soucis sans en créer d’autres …

Dans le cas d’une valorisation par calcul ça doit encore être différent… ça devrait même pas transformer le truc

ça peut être un point à tester sur la 4.2…
Y a du 7.4 à tester de toute façon

on est d’accord que exponential n’est pas un type qui existe en php … c’est une classe spécifique de symphony ? ou bien juste un ajout de jeedom ?
Ma question en gros, c’est quand on écrit cette chaine de caractère « 1E-2 » , qui l’interprète en exponential, est-ce php, symphony ou jeedom ?

Au passage…
EOS de la 5.1 demain

C’est du php ça tu peut le tester sur un script php bête et méchant sur un serveur Apache de base.

Oui a priori la stable est en 5.2 et la 5.3 bientôt.
Sur leur GitHub j’ai testé avec la 5.1 en effet.

Ils ont des polyfill aussi pour la compatibilité des versions php, mais ascendant ou descendant je sais pas. Je connais vraiment pas ce framework.

Qqlun pourrait répertorier des cas qui posent soucis actuellement ? Je pourrai les tester avec un symfony à jour voir fouiller le core.

Tiens un cas rigolo ::

(#mois#*(-1.15*#mois#+15)+5)

image

round(#mois#*(-1.15*#mois#+15)+5)

image

Il n’y a pas que Symfony qui pose problème.

Il y a aussi setTags qui fait un explode par la virgule:
image

Les remplacements de chaine au début d’evaluate :
image

1 « J'aime »

Ça peut être du à trop de niveaux de parenthèses:
image
Sans les parenthèses autour de 3+2, ça fonctionne

Je sais plus mais j’ai souvenir que Loic avait limité la profondeur de recherche… Bon là c’est pas les hauts fonds

Il y a aussi Symfony 4.4 LTS avec correction des bugs jusqu’en 11/2022 Symfony, High Performance PHP Framework for Web Development
Elle nécessite aussi php7.1
Les 5.1, 5.2, 5.3 ont une durée de support de 8 mois

çà le soucis vient du core, direct dans symfony c’est bon même v2.6. Faudrait trouver pourquoi …

Par contre pour symfony il faut les *
12(-1.15*12+15)+5 => Unexpected token « punctuation » of value « ( » around position 3 for expression 12(-1.15*12+15)+5

12*(-1.15*12+15)+5 → OK

Là je doute fort qu’on puisse y faire quelque. Faudrai un regex qui decoupe les strings et les évaluent en pré-évaluation de l’expression complète. çà peut se faire mais va falloir quelques cerveaux :thinking:

Je me demande quand même si on peux pas déporter les fonctions tag() variable() etc dans symfony et lui laisser tout gérer. A voir si çà serait mieux. Mais de toutes façon je doute qu’on arrive à un truc 100% fonctionnel, pour ceux qui dev un peu c’est quand même tricky …

Ceci marche bien:
$scenario->setLog(testExpression("'1E-2'"));

On ne peut pas donner à symfony une fonction native php sans l’enregistrer auparavant avec une fonction register

j’ai pas encore réussi mais dans l’idée ça donne cela:

ExpressionFunction::fromPhp('floatval');
$scenario->setLog(testExpression("floatval('2E-6')+1"));

Sinon, le msg d’erreur qu’on voit ça vient de symfony:

[2020-12-06 19:05:00][SCENARIO] Second try ERROR: The function « floatval » does not exist around position 1 for expression floatval('2E-6')+1.

Mais pourtant floatval() est une fonction standard php, bizarre non ? Parce que quitte à lui donner des fonctions comme çà, on lui plug le core avec les getTag() et getVariable() et il se débrouille :rofl:

Cette syntaxe dans le testeur d’expression fonctionne nickel :

floatval('2.0E-6' + 0)+1

La fonction floatval est donc bien connu de symfony