Christian Heimes wrote:
> Paul Moore wrote:
>> Suggestion:
>>
>> - int() has to stay in builtins for obvious reasons.
>> - put *all* of trunc, ceil, floor, round into math.
>> - make int(float) an error
> 
> Slightly different suggestion:
>  - define int(float) as int(trunc(float))
> 
> In my humble opinion lots of people expect int(-2.5) == -2 and int(2.5)
> == 2. Or in other words: int(float) chops of the digits after the dot.

FWIW, this approach gets a +1 from me (although I'm -0 on taking round() 
out of builtins - that seems like a pointless incompatibility to me).

Yes, blessing 'trunc' as the default mechanism for converting a 
non-integral number to an integer is somewhat arbitrary, but it's a 
piece of arbitrariness with a very long history behind it.

For that matter, we could even formally define int() as falling back to 
trunc() if there is no direct conversion (i.e. int knows about the type 
natively, or the type provides an __int__ method). That way non-integral 
types could just implement __trunc__ without having to worry about 
adding "__int__ = __trunc__" to the class definition.

We would still have operator.index to identify types which can be 
losslessly converted to a builtin integer.

Cheers,
Nick.

-- 
Nick Coghlan   |   [EMAIL PROTECTED]   |   Brisbane, Australia
---------------------------------------------------------------
             http://www.boredomandlaziness.org
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to