Удивительный мир чисел с плавающей запятой:
printf("%.18f\n", 40.7*100);
//prints 4070.000000000000454747
printf("%.18f\n", 20.7*100);
//prints 2070.000000000000000000
Короче говоря: числа с плавающей запятой не могут точно представлять все рациональные числа.В частности, ни 407/10, ни 207/10 не могут быть представлены точно, и поэтому результат целочисленного преобразования всегда имеет неопределенность в одну единицу.
Единственные рациональные числа, которые могут быть представлены точно как двоичные числа с плавающей запятойчисла имеют вид «маленькое нечетное целое число, умноженное на степень двойки», или, другими словами, те, которые имеют небольшое двоичное расширение.