Кстати, второй вариант хреново работает с «разряженными» дробными числами. По идее, там надо вместо > 0.01 написать > 0.000001 - то есть предел точности.
Самое интересное, что первый вариант работает безошибочно. Я бы использовал инрл именно его.
вот только смысла принципиального нет хранить дробную часть в int без указания точности - их и не сравнить, и не использовать в выражении, а так обычный int( 10000. * x ) % 10000 будет во много раз быстрей