Как раз сейчас я наткнулся на то, что функция С++ floor возвращает тот же тип, который вы передаете ему, будь то float, double или такой.
В соответствии с этой ссылкой функция возвращает округленное целочисленное значение. Почему это не целое число?