Решение состоит в том, чтобы избежать этой зависимости от математики с плавающей точкой, где точность с плавающей точкой может стать проблемой.Или, более реалистично, просто помните, когда вы используете FP, и помните о точности.Это не проблема Lua, которая требует решения, специфичного для Lua.
maybethree
является неправильным: это никогда три.Ваш код выше является детерминированным.Он всегда будет печатать только a
и b
.Поскольку переменная maybethree
меньше трех, конечно, цикл for
не будет выполняться 3 раза.
Функция print
также ведет себя так, как определено / ожидается.Используйте string.format
, чтобы показать номер FP во всем его великолепии:
print(string.format("%1.16f", maybethree)) -- 2.9999999999999996
Все еще нужно использовать вычисленные значения для управления вашей петлей for
?Тогда вы уже упомянули ответ: реализовать функцию округления.