Because 8.0 is a perfectly good floating point number. Let's generalize the concept of `math.ceil` to include a "digits" parameter; that is, you get to choose the number of digits after the decimal point that you want to keep. This isn't as far-fetched as it sounds; the [Round function][1] already has this ability. By this new definition, `Math.Ceil(12.755, 2)` would return 12.76, which you wouldn't be able to return as an `int`. The only values that could be returned as `int` would be those of the form `Math.Ceil(x, 0)`, but it probably doesn't make much sense to have a function that returns a different type based on the value of one of its input parameters. Anyway, it's more convenient to stay in the floating-point realm for working with these numbers, especially since any subsequent math on the returned numbers is almost certainly going to involve floating point anyway. [1]: https://docs.python.org/2/library/functions.html#round