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



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

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

所以我有一个双重问题:

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

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

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__方法。

math.trunc()int()快10%;至少在我的计算机配置上是这样。

相关内容

  • 没有找到相关文章

最新更新