SETSCREEN 800, 600, 0
GLOBAL i, Menge, Level = 1
FOR i = 1 TO 20
INC Level, 0.1
IF Level = 2 THEN Menge = 10
PRINT "Level = " + Level + " Menge = " + Menge, 10, i*15
NEXT
SHOWSCREEN
MOUSEWAIT
Warum wird Menge nicht 10 ?
Weil hier ein interner Fehler im Prozessor dafür sorgt, dass Du 0.1 nicht exakt in IEEE darstellen kannst, und somit nicht 2.0 erreicht wird:
GLOBAL i, Menge, Level = 1
FOR i = 1 TO 20
INC Level, 0.1
IF Level = 2 THEN Menge = 10
PRINT "Level = " + (Level-2.0) + " Menge = " + Menge, 10, i*15
NEXT
SHOWSCREEN
MOUSEWAIT
zeigt den Fehler.
Du kannst das umgehen, indem Du schreibst:
IF ABS(Level - 2.0) <1E-7 THEN Menge=10
There is a nice command for figuring out problems like this. Put this before your IF line:
DEBUG "Level: " + Level + "\n"
If you put the compiler in debug-mode and run the code it will print what Level contains each loop.
Ok, gut zu wissen.
Habe eine Rundefunktion und mit:
IF Round(Level,1) = 2 THEN Menge = 10
geht es.
FUNCTION Round: Zahl, Stellen
LOCAL p
p = POW(10, Stellen)
RETURN INTEGER(Zahl * p + .5) / p
ENDFUNCTION