LUA (Corona SDK) math.floor () returns an incorrect value in increments of 0.1

I have a strange error when I use the Math.floor function with a double value incremented by 0.1 each time.

This only happens in increments of 0.1 and starts with a value of 5

Example: math.floor (4) return 4 , but math.floor (5) returns 4 !!!

You can try it yourself with this simple piece of code:

for i=3,7,0.1 do 
    print("val : "..i.." floor : "..math.floor(i))
end

Here is the result of the above code:

 Corona Simulator[1494:707] val : 3 floor : 3
 Corona Simulator[1494:707] val : 3.1 floor : 3
 Corona Simulator[1494:707] val : 3.2 floor : 3
 Corona Simulator[1494:707] val : 3.3 floor : 3
 Corona Simulator[1494:707] val : 3.4 floor : 3
 Corona Simulator[1494:707] val : 3.5 floor : 3
 Corona Simulator[1494:707] val : 3.6 floor : 3
 Corona Simulator[1494:707] val : 3.7 floor : 3
 Corona Simulator[1494:707] val : 3.8 floor : 3
 Corona Simulator[1494:707] val : 3.9 floor : 3
 Corona Simulator[1494:707] val : 4 floor : 4
 Corona Simulator[1494:707] val : 4.1 floor : 4
 Corona Simulator[1494:707] val : 4.2 floor : 4
 Corona Simulator[1494:707] val : 4.3 floor : 4
 Corona Simulator[1494:707] val : 4.4 floor : 4
 Corona Simulator[1494:707] val : 4.5 floor : 4
 Corona Simulator[1494:707] val : 4.6 floor : 4
 Corona Simulator[1494:707] val : 4.7 floor : 4
 Corona Simulator[1494:707] val : 4.8 floor : 4
 Corona Simulator[1494:707] val : 4.9 floor : 4
 Corona Simulator[1494:707] val : 5 floor : 4
 Corona Simulator[1494:707] val : 5.1 floor : 5
 Corona Simulator[1494:707] val : 5.2 floor : 5
 Corona Simulator[1494:707] val : 5.3 floor : 5
 Corona Simulator[1494:707] val : 5.4 floor : 5
 Corona Simulator[1494:707] val : 5.5 floor : 5
 Corona Simulator[1494:707] val : 5.6 floor : 5
 Corona Simulator[1494:707] val : 5.7 floor : 5
 Corona Simulator[1494:707] val : 5.8 floor : 5
 Corona Simulator[1494:707] val : 5.9 floor : 5
 Corona Simulator[1494:707] val : 6 floor : 5
 Corona Simulator[1494:707] val : 6.1 floor : 6
 Corona Simulator[1494:707] val : 6.2 floor : 6
 Corona Simulator[1494:707] val : 6.3 floor : 6
 Corona Simulator[1494:707] val : 6.4 floor : 6
 Corona Simulator[1494:707] val : 6.5 floor : 6
 Corona Simulator[1494:707] val : 6.6 floor : 6
 Corona Simulator[1494:707] val : 6.7 floor : 6
 Corona Simulator[1494:707] val : 6.8 floor : 6
 Corona Simulator[1494:707] val : 6.9 floor : 6
 Corona Simulator[1494:707] val : 7 floor : 6

If this can help, if we applied modulo 1 to the result of the buggy value, we will get this as the result: 0.99999999999999

+5
source share
2 answers

, float,

, :

,

, , - . Lua . 0,1 0,1 , . , 5,0, 4,99999999999999999, . 4. .

Lua (v5.1) .

, .

,

- Corona Labs - Support support@coronalabs.com

+4
source

Floating-point numbers are diabolical. Do not use them as cycle counters.

for i = 30, 70 do 
    local i = i / 10
    print("val : "..i.." floor : "..math.floor(i))
end
+4
source

All Articles