什么时候使用trunc()而不是int()将浮动类型数字转换为整数更好?

时间:2018-09-07 13:30:21

标签: python python-3.x int truncate

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

它们的不同之处在于int也可以用于将数字字符串转换为整数。

所以我有两个问题:

  1. 我想知道除字符串以外,是否还有truncint给出不同输出的输入?

  2. 如果不是,什么时候最好使用trunc将浮点型数字转换为整数?

1 个答案:

答案 0 :(得分:6)

intmath.truncstrrepr具有相似的关系。 int委托给类型的__int__方法,如果未找到__int__,则退回到__trunc__方法。 math.trunc直接委托给该类型的__trunc__方法,并且没有后备。与始终为object定义的__str____repr__不同,intmath.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__ methodint(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是通用转换,并且在更多情况下会成功。

请不要忘记operator.index__index__方法。