Why does it sometimes add 0.099999999999999999999 instead of 0.1? It also sometimes decides to add 0.10000000000000000001.
The Timer is set to 0. It counts up in 0.1’s until the player finishes the obby. The server sets the timer value to an IntValue instance in the player. This is what the client changes it to on .Changed().
To summarise, for numbers to be stored in a computer system they must be stored in binary. In floating point binary, some numbers are unable to be represented accurately with a given number of bits. When this happens, the number may not be represented completely accurately but is often very close.
This application shown in the post is more like a stopwatch rather than a timer, it’s perfectly acceptable to use a repeat ... until ... loop in this case as it’s counting up indefinitely, until a certain condition is met.