为什么int(float(str))有效但int(str)不起作用

时间:2018-07-21 18:21:03

标签: python type-conversion int

假设我有一个字符串:

temp = "0.1"

当我运行int(temp)时:

我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '0.1'

但是当我运行int(float(temp))时:

我得到正确的输出,即0


为什么先转换为float然后再转换为int却不能直接转换为int吗?

感谢和问候

5 个答案:

答案 0 :(得分:6)

这是因为您的字符串具有浮点格式。因此,当您直接将“ 0.1”强制转换为int时,它将返回错误。但是,如果您强制转换为float并转换为int,则可以截断您的数字。

答案 1 :(得分:3)

这是documented的行为(强调我的行为):

  

如果x是一个数字,则可以是纯整数,长整数或浮点数。如果x是浮点数,则转换 会截断为零

     

如果x不是数字或给出了base,则x必须是字符串或Unicode对象 表示整数文字 以基数base

关于您的问题为什么,唯一的答案是:因为它是设计使然。

答案 2 :(得分:2)

从python docs

  

如果x不是数字或给定基数,则x必须是代表以基数为底的整数文字的字符串,字节或字节数组实例。可选地,文字可以在+或-之前(之间没有空格)并由空格包围。以n为底的原义文字由数字0到n-1组成,其中a到z(或A到Z)的值是10到35。默认的底数是10。允许的值为0和2–36。与代码中的整数文字一样,Base-2,-8和-16文字可以选择以0b / 0B,0o / 0O或0x / 0X作为前缀。

然后,x必须是代表整数的字符串,字节或字节数组实例 因此,如果您在字符串中添加A[k],它将不再代表整数

答案 3 :(得分:1)

如果将字符串传递给int,则仅当字符串直接表示整数时才有效。如果字符串表示一个非整数,则不起作用。但是,如果将浮点数传递给int,则它总是可以通过截断浮点数来工作。 int只是不接受“可以先将其转换为浮点然后截断它们的字符串,然后再将其截断”;它仅接受直接表示整数的字符串。 int就是这样。

答案 4 :(得分:1)

区别在于,数字对象(例如浮点数)具有特殊的__int____trunc__方法,该方法会在解析字符串时计算其整数值。请参阅文档中的int()

因此int(0.1)的结果来自O.1对象,而int("0.1")的结果来自int()函数。