Проще говоря: у компьютеров нет бесконечной памяти, поэтому они могут использовать столько разрядов для хранения числа.Если число имеет слишком много знаков после запятой, они где-то обрезаются, и так уж получается, что в двоичном представлении 0,4 (два пятых) больше знаков, чем может сохранить;так что после их обрезания у вас останется 0,399999 что-то, что print
достаточно умно, чтобы напечатать до 0,4, но если вы floor()
, оно округляется без жалости, что приводит к полученным результатам.
Также, пожалуйста, обратите внимание, что вы могли бы просто гуглить это;это один из самых распространенных вопросов в программировании;)
Например, попробуйте это:
string.format("%f", 20.4*100)
--> 2040.000000
string.format("%0.20f", 20.4*100)
--> 2039.99999999999977262632