• Nice question, thanks!

    Though I think the explanation left a little to be desired. It isn't just that the decimal type was used, it was that the decimal type was used and no precision/scale was specified, so the number got rounded down to 1.0 when it was converted.

    For example this results in the same thing as all of your float examples:

    select Ceiling(convert(decimal(2, 1), 1.09))

    Because with a scale of one specified it gets rounded to 1.1 before it goes to ceiling.