假设我有一个字符串:
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
吗?
感谢和问候
答案 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()
函数。