Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[DIR MX] bug ou division par Zero dans un calcul ?

4 réponses
Avatar
Twinky
Hello

Dans un tableau récapitulatif d'un jeu, je calcule le pourcentage de
réussite du niveau terminé

1 )----------------------
soit :
-- Exemple pour :
-- gUserPoint = 25
-- gPointMaxi = 100

gPointMaxi = 100
Pourcentage = float(gUserPoint / gPointMaxi) * 100
member("pourcent").text = string(Pourcentage&&"%")

on obtient ainsi le %, mais director ne veut rien savoir et affiche 0,00 %
<== oops ?????

de plus je n'ai pas d'erreur de script, ni un msg d'erreur de division par
zéro, donc je suis en pleine interrogation
à savoir < >BUG ou division par zéro ????? < >

2 )----------------------
alors qu'en faisant ceci :

Pourcentage = float(gUserPoint * (gPointMaxi * 0.01))
member("pourcent").text = string(Pourcentage&&"%")

j'obtiens bien dans le member("pourcent") le chiffre de 25.00 %

J'ai beau recompiler le script 1000 fois , quitter director et relancer le
dir aussi mille fois
tjs le meme probleme, et ce, sur différents pc, cherchez l'erreur :)
du coup j'ai pris la solution N°2 mais suis pas sûr que le résultat soit
exact lors
d'une réouverture du DIR dans 20 ans, d'ici là DIRECTOR s'appelera
FOCALCULATOR ;)

j'ai fait un test sur une machine à calculer et j'obtiens bien 25 % avec les
2 formules
autant faire Pourcentage = gUserPoint :) enfin bref

Happy day scripter

Twinky

4 réponses

Avatar
Ned
Twinky a tapotylographié :

| Hello
|
| Dans un tableau récapitulatif d'un jeu, je calcule le pourcentage de
| réussite du niveau terminé
|
| 1 )----------------------
| soit :
| -- Exemple pour :
| -- gUserPoint = 25
| -- gPointMaxi = 100
|
| gPointMaxi = 100
| Pourcentage = float(gUserPoint / gPointMaxi) * 100
| member("pourcent").text = string(Pourcentage&&"%")
|
| on obtient ainsi le %, mais director ne veut rien savoir et affiche
| 0,00 % <== oops ?????
|

c'est tout à fait normal :
tu définis gUserPoint et gPointMaxi comme des entiers (implicitement) donc
dans ta ligne :

Pourcentage = float(gUserPoint / gPointMaxi) * 100

Director exécute d'abord le contenu de la parenthèse :

gUserPoint / gPointMaxi -- division d'entiers = divisien entière !!!
=> 0

ensuite float(0) => 0.00

Pour éviter ça, le plus simple est de faire :
Pourcentage = ( float(gUserPoint) / float(gPointMaxi) ) * 100

ou encore :
Pourcentage = ( (gUserPoint + 0.0 ) / (gPointMaxi + 0.0) ) * 100

en ajoutant un float à un entier, tu transtype celui-ci en entier :o)

--
------------------
Ned
----------------------------------------
Bien faire et laisser braire
----------------------------------------
Avatar
Bubar
> Pour éviter ça, le plus simple est de faire :
Pourcentage = ( float(gUserPoint) / float(gPointMaxi) ) * 100


Il suffit d'un seul float()
(float(gUserPoint) / gPointMaxi ) * 100

Si lors d'une opération, l'un des membres est float, alors director
considère que tous doivent être float.
J'entends par opération, un unique calcul (un / ou un *, mais pas une suite
complète)

--
Bubar
Avatar
Twinky
Merci Ned ces précisions

faut que je potasse, une erreur comme celle-ci BOOOOOOO
Twinky ouvre son bouquin à la page introduction " Qu'est que Lingo Script "
:)

Twinky
Avatar
Twinky
Effectivement Bubar ca marche aussi dans ce sens

(float(gUserPoint) / gPointMaxi ) * 100

Merci pour cette autre soluce :)

Twinky