Discuss Scratch

Lu_Li_49
Scratcher
500+ posts

Problème avec les listes

Bonjour,
J'ai essayé d'ajouter plusieurs fois 0.1 dans un des éléments d'une liste, et cela fait des choses étranges.

quand le @greenFlag est cliqué::events hat
remplacer l'élément (1) de la liste [liste v] par (0)::list
répéter (10) fois {
remplacer l'élément (1) de la liste [liste v] par ((élément (1) de la liste [liste v]::list) + (0.1))::list
}::control

Après la première répétition, le résultat est 0.1, puis 0.2. Pour l'instant tout va bien.
À la troisième répétition, cela donne 0.30000000000000004.
À la quatrième, 0.4,
puis 0.5,
0.6
0.7
À la huitième, le problème recommence, cela fait 0.7999999999999999
et ça continue.

Je crois que mon ordi fait de la magie… Est ce que quelqu'un saurait régler ce problème totalement aléatoire, sans passer par une autre variable ni utiliser d'arrondi ? On pourrait très bien essayer en ajoutant 0.01 à chaque fois, ça fait la même chose.

Bonne fin de journée et merci d'avance pour vos réponses !

Last edited by Lu_Li_49 (Sept. 2, 2026 14:13:02)

ma33-ma
Scratcher
1000+ posts

Problème avec les listes

Lu_Li_49 wrote:

Bonjour,
J'ai essayé d'ajouter plusieurs fois 0.1 dans un des éléments d'une liste, et cela fait des choses étranges.

quand le @greenFlag est cliqué::events hat
remplacer l'élément (1) de la liste [liste v] par (0)::list
répéter (10) fois {
remplacer l'élément (1) de la liste [liste v] par ((élément (1) de la liste [liste v]::list) + (0.1))::list
}::control

Après la première répétition, le résultat est 0.1, puis 0.2. Pour l'instant tout va bien.
À la troisième répétition, cela donne 0.30000000000000004.
À la quatrième, 0.4,
puis 0.5,
0.6
0.7
À la huitième, le problème recommence, cela fait 0.7999999999999999
et ça continue.

Je crois que mon ordi fait de la magie… Est ce que quelqu'un saurait régler ce problème totalement aléatoire, sans passer par une autre variable ni utiliser d'arrondi ? On pourrait très bien essayer en ajoutant 0.01 à chaque fois, ça fait la même chose.

Bonne fin de journée et merci d'avance pour vos réponses !
ça c'est normal tout les langages font des approximation (sauf le COBOL mais vzy…) tu as cet article (c'est pour le PHP mais c'est pareil) qui explique pourquoi.
Si tu veut régler l'affichage : fais un arrondit au 10000000 ième généralement ça suffit…
Lu_Li_49
Scratcher
500+ posts

Problème avec les listes

Merci !
AntoinoSills
Scratcher
100+ posts

Problème avec les listes

replace item (1 v) of [list v] with (round (item (1) [list v] + 0.1))
tu peux utiliser le bloc arrondi de () pour être sûr que ça fait bien 0.1, 0.2…
ma33-ma
Scratcher
1000+ posts

Problème avec les listes

AntoinoSills wrote:

replace item (1 v) of [list v] with ((round (item (1) of [list v] ))+ (0.1))
tu peux utiliser le bloc arrondi de () pour être sûr que ça fait bien 0.1, 0.2…
ça pour le coup ça fais juste 0.1 (à chaque fois…)
Faucon16
Scratcher
100+ posts

Problème avec les listes

Sinon tu peux faire

replace item (1) of [list v] with (((round ((item (1) of [list v])/(0.1)))*(0.1))+(0.1))

Ça permettra d'arrondir les nombres à 0.1

Last edited by Faucon16 (Oct. 11, 2026 16:46:55)

Powered by DjangoBB