什么时候使用 trunc() 代替 int() 将浮点型数字转换为整数更好?

问题描述 投票:0回答:2

trunc
int
函数为我尝试过的每个浮点类型输入返回相同的输出。

它们的不同之处在于

int
也可用于将数字字符串转换为整数。

所以我有两个问题:

  1. 我想知道,除了字符串之外,是否有任何输入

    trunc
    int
    会给出不同的输出?

  2. 如果没有,什么时候使用

    trunc
    将浮点型数字转换为整数更好?

python python-3.x int truncate
2个回答
20
投票

int
math.trunc
str
repr
的关系有些类似。
int
委托给类型的
__int__
方法,如果未找到 __trunc__
,则回退到 
__int__
 方法。 
math.trunc
直接委托给类型的
__trunc__
方法并且没有后备。与始终为 __str__
 定义的 
__repr__
object
 不同,
int
math.trunc
都可能引发开箱即用的错误。

对于我所知道的所有内置类型,

__int__
__trunc__
都是在适当的情况下合理定义的。但是,您可以定义自己的一组测试类来查看收到的错误:

class A:
    def __int__(self):
        return 1

class B:
    def __trunc__(self):
        return 1

class C(): pass

math.trunc(A())
math.trunc(C())
都会提高
TypeError: type X doesn't define __trunc__ method
int(C())
会升高
TypeError: int() argument must be a string, a bytes-like object or a number, not 'C'
。然而,
int(A())
int(B())
math.trunc(B())
都会成功。

最终决定使用哪种方法是内涵之一。

trunc
本质上是类似于
floor
的数学运算,而
int
是通用转换,并且在更多情况下成功。换句话说,
int
可以尝试将字符串之类的东西转换为整数,而
trunc
适用于
floats
,它已经有明确定义的整数部分。

不要忘记

operator.index
__index__
方法。


1
投票

math.trunc()
int()
快约 10%;至少在我的电脑配置上。

© www.soinside.com 2019 - 2024. All rights reserved.