为什么int(float(str))工作,而int(str)不起作用



>假设我有一个字符串:

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()函数。

相关内容

最新更新