[Python-Dev] trunc()

"Martin v. Löwis" martin at v.loewis.de
Thu Jan 24 20:36:18 CET 2008


> trunc() has well-defined semantics -- it takes a Real instance and
> converts it to an Integer instance using round-towards-zero semantics.

No. trunc calls __trunc__, which does whatever it pleases to do.

>>> class A:
...   def __trunc__(self):
...      return 0
...
>>> a=A()
>>> trunc(a)
0

> 
> int() has undefined semantics -- it takes any object and converts it
> to an int (a concrete type!) using whatever rules it likes -- the
> definition of __int__ is up to whatever the source type likes to do.
> For float this has been defined the same as trunc() above, but for
> other types, who knows! int() of a string does something completely
> different.

But why is that a reason to keep trunc()? If you only ever want to
convert floats to ints, you can use either one, with no difference.
int() does *not* have undefined semantics, for floats, it converts
it to an integer using round-towards-zero semantics.

Regards,
Martin


More information about the Python-Dev mailing list