Python 为什么int(float(str))工作,而int(str)不工作
假设我有一个字符串:Python 为什么int(float(str))工作,而int(str)不工作,python,type-conversion,int,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' 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 ValueError:基数为10的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'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:基数为10的int()的文本无效:“0.1”
但是当我运行int(float(temp))
时:
我得到了正确的输出,即0
为什么转换为
float
然后再转换为int
有效,但直接转换为int
无效?
感谢并问候这是因为您的字符串具有浮点格式。因此,当您直接将“0.1”强制转换为int时,它将返回一个错误。但是,如果您强制转换为float,然后转换为int,则可以截断您的数字。这是因为您的字符串具有float格式。因此,当您直接将“0.1”强制转换为int时,它将返回一个错误。但如果您将其转换为float,然后转换为int,则可以截断您的数字。这是一种行为(强调我的行为): 如果
x
是一个数字,那么它可以是普通整数、长整数或浮点数。如果x
是浮点,则转换将向零截断
如果x
不是一个数字,或者如果给定了base
,则x
必须是一个字符串或Unicode对象,以基数base
表示整数文本
至于你为什么要问这个问题,唯一的答案是:因为它是设计出来的。这是行为(我的重点):
如果x
是一个数字,那么它可以是普通整数、长整数或浮点数。如果x
是浮点,则转换将向零截断
如果x
不是一个数字,或者如果给定了base
,则x
必须是一个字符串或Unicode对象,以基数base
表示整数文本
至于你为什么要问这个问题,唯一的答案是:因为它是这样设计的。如果你把一个字符串传递给
int
,它只在字符串直接表示整数时才起作用。如果字符串表示非整数,则不起作用。但是,如果将浮点值传递给int
,它总是通过截断浮点值来工作int
只是不接受“可以通过先将字符串转换成浮点然后再截断它们来转换为int的字符串”;它只接受直接表示整数的字符串。这就是int
的工作原理。如果将字符串传递给int
,则仅当字符串直接表示整数时才有效。如果字符串表示非整数,则不起作用。但是,如果将浮点值传递给int
,它总是通过截断浮点值来工作int
只是不接受“可以通过先将字符串转换成浮点然后再截断它们来转换为int的字符串”;它只接受直接表示整数的字符串。这就是int
的工作原理。来自python
如果x不是一个数字或者如果给定了base,那么x必须是一个字符串、字节或bytearray实例,表示基数中的整数文本。或者,文字前面可以加+或-(中间没有空格)并用空格包围。一个base-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必须是表示整数的字符串、字节或bytearray实例
因此,如果将
添加到字符串中,它将不再表示python中的整数
如果x不是一个数字或者如果给定了base,那么x必须是一个字符串、字节或bytearray实例,表示基数中的整数文本。或者,文字前面可以加+或-(中间没有空格)并用空格包围。一个base-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必须是表示整数的字符串、字节或bytearray实例
因此,如果将
添加到字符串中,它将不再表示整数不同之处在于,像浮点这样的数值对象有一个特殊的\u int\u
或\u trunc\u
方法,在解析字符串时计算它们的整数值。请参阅文档中的
因此,
int(0.1)
的结果来自O.1
对象,int(“0.1”)
的结果来自int()
函数。不同之处在于,浮点数等数值对象有一个特殊的\uuuu int\uuuu
或\uu trunc\uuuu
方法,在解析字符串时计算它们的整数值。请参阅文档中的
因此,
int(0.1)
的结果来自O.1
对象,int(“0.1”)
的结果来自int()
函数。因为字符串中的值不是整型变量,它是一个浮点型
变量。@Azhy但是float(temp)中的值也是一个浮点变量Yes,但它位于当前不是浮点变量的字符串中。@Azhy Ahhh。。。现在我得到了一个可能的重复项,因为字符串中的值不是整数变量,它是一个浮点变量。@Azhy但float(temp)中的值也是一个浮点变量是的,但它在一个字符串中,而不是当前的浮点变量。@Azhy Ahhh。。。现在我得到了它可能的副本,但是为什么它不能直接截断字符串呢?因为int()不能将“0.1”识别为数字。但是,在这种情况下,float()可以识别。但是int可以识别floo