>假设我有一个字符串:
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.1"转换为int时,它会返回错误。但是,如果您投射为 float 并在 int 之后投射,它能够截断您的数字。
这是记录在案的行为(强调我的):
如果
x
是一个数字,它可以是纯整数、长整数或浮点数。如果x
浮点数,则转换将截断为零。如果
x
不是数字或给定base
,则x
必须是字符串或 Unicode 对象,表示以基数表示的整数文本base
至于你的问题为什么,唯一的答案是:因为它是设计出来的。
来自 python 文档
如果 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 必须是表示整数的字符串、字节或字节数组实例 因此,如果您向字符串添加.
,它将不再表示整数
如果将字符串传递给int
,则仅当字符串直接表示整数时才有效。 如果字符串表示非整数,则不起作用。 但是,如果您将浮点数传递给int
,则通过截断浮点数,它始终有效。int
只是不接受"可以通过先将它们变成浮点数然后截断它们来制作成整数的字符串";它只接受直接表示整数的字符串。 这就是int
的工作方式。
不同之处在于,像浮点数这样的数字对象具有特殊的__int__
或__trunc__
方法,该方法在解析字符串时计算其整数值。请参阅文档中的 int()。
因此,int(0.1)
的结果来自O.1
对象,int("0.1")
的结果来自int()
函数。