trunc
and int
functions return the same output for every float type inputs that I have tried.
They differ in the way that int
can also be used to convert numerical strings to integers.
So I have a two-fold question:
I would like to know if, apart from strings, is there any input for which trunc
and int
give different outputs?
If not, when is it better to just use trunc
to convert floating type numbers to integers?
Convert a float to an int always results in a data loss. The trunc() function returns the integer part of a number. The floor() function returns the largest integer less than or equal to a number.
Python also has a built-in function to convert floats to integers: int() . In this case, 390.8 will be converted to 390 . When converting floats to integers with the int() function, Python cuts off the decimal and remaining numbers of a float to create an integer.
Integer and Float Conversions Integers and floats are data types that deal with numbers. To convert the integer to float, use the float() function in Python.
A float value can be converted to an int value no larger than the input by using the math. floor() function, whereas it can also be converted to an int value which is the smallest integer greater than the input using math. ceil() function.
int
and math.trunc
have a somewhat similar relationship as str
and repr
. int
delegates to a type's __int__
method, and falls back to the __trunc__
method if __int__
is not found. math.trunc
delegates to the type's __trunc__
method directly and has no fallback. Unlike __str__
and __repr__
, which are always defined for object
, both int
and math.trunc
can raise errors out of the box.
For all the built-in types that I am aware of, both __int__
and __trunc__
are defined sensibly where appropriate. However, you can define your own set of test classes to see what errors you get:
class A:
def __int__(self):
return 1
class B:
def __trunc__(self):
return 1
class C(): pass
math.trunc(A())
and math.trunc(C())
will both raise TypeError: type X doesn't define __trunc__ method
. int(C())
will raise TypeError: int() argument must be a string, a bytes-like object or a number, not 'C'
. However, int(A())
, int(B())
and math.trunc(B())
will all succeed.
In the end the decision as to which method to use is one of connotation. trunc
is inherently a math operation similar to floor
, while int
is a general purpose conversion, and succeeds in more cases.
And don't forget about operator.index
and the __index__
method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With