Caleb Hattingh wrote: > 4.0//2 doesn't return an integer, but the equality against an integer > still holds. I agree that integer division should return an integer, > because using the operator at all means you expect one.
There are actually two conflicting expectations here: You're right, the semantics of a floor operation let you expect an int, but on the other hand, the result type of all other binary operations is the common type into which the operands are casted before the operation, and the result type of math.floor() is always float, even for an int operand. The thing that I thought is a bit awkward is that a//b * some_list will not work if a or b is a float, even if it represents an integer and even though the result of a//b always represents an integer. Now there are two ways to resolve this: a) a//b always returns an int (or long) b) n * some_list works if n is a float representing an integer I was actually considering solution b), not a). By the way, solution a) has another drawback: What would you return if a=1e200 and b=1, or a=1 and b=1e-200? Of course, a floor division would be pretty silly with such numbers, but returning a long number with 200 digits of which most are wrong anyway somehow does not look like the right thing to do. -- Christoph -- http://mail.python.org/mailman/listinfo/python-list