First lest look at the R documentation for this functions:
S4 methods These are all (internally) S4 generic.
ceiling, floor and trunc are members of the Math group generic. As an
S4 generic, trunc has only one argument.
round and signif are members of the Math2 group generic.
Warning The realities of computer arithmetic can cause unexpected
results, especially with floor and ceiling. For example, we ‘know’
that floor(log(x, base = 8)) for x = 8 is 1, but 0 has been seen on an
R platform. It is normally necessary to use a tolerance.
Now if you run the experiment using round, you go the following:
> floor(1000*(0.6/24))
[1] 24
>
> floor(1000*0.6/24)
[1] 25
>
> round(1000*(0.6/24))
[1] 25
>
> round(1000*0.6/24)
[1] 25
>
> ceiling(1000*(0.6/24))
[1] 25
>
> ceiling(1000*0.6/24)
[1] 25
>
Conclusion: ceiling is working but as the documentation suggests, can also fail as floor. Round seems to be a better option here.