何时使用trunc()而不是int()将浮点类型数转换为整数?

问题描述 投票:5回答:1

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

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

所以我有一个双重问题:

  1. 我想知道,除了字符串之外,是否有任何输入truncint给出不同的输出?
  2. 如果没有,何时使用trunc将浮点型数转换为整数更好?
python python-3.x int truncate
1个回答
6
投票

intmath.truncstrrepr有一些类似的关系。 int代表一种类型的__int__方法,并且如果找不到__trunc__则回退到__int__方法。 math.trunc直接委托类型的__trunc__方法,没有后备。与__str____repr__不同,它们总是为object定义,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__方法。

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