Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么int(float(str))工作,而int(str)不工作_Python_Type Conversion_Int - Fatal编程技术网

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