Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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(input())时会出现错误,其中输入是十进制的(例如,';87.94';)?_Python_Math_Multiplication - Fatal编程技术网

Python 为什么在调用int(input())时会出现错误,其中输入是十进制的(例如,';87.94';)?

Python 为什么在调用int(input())时会出现错误,其中输入是十进制的(例如,';87.94';)?,python,math,multiplication,Python,Math,Multiplication,我是一名编程新手,在Python乘法方面有困难。我有这样的代码: def getPriceDiscount(): price = int(input()) if price > 3000: priceDiscount = price * 0.6 return priceDiscount else: return price 但当我执行它并输入一个像87.94这样的十进制数字时,我得到以下错误: ValueError:

我是一名编程新手,在Python乘法方面有困难。我有这样的代码:

def getPriceDiscount():
    price = int(input())
    if price > 3000:
        priceDiscount = price * 0.6
        return priceDiscount
    else:
        return price
但当我执行它并输入一个像87.94这样的十进制数字时,我得到以下错误:

ValueError: invalid literal for int() with base 10: '87.94'
int()
方法是否能够将字符串“87.94”转换为一个数字,从而允许我将其乘以0.6?我应该做什么来执行转换


我使用的是Python 3.2.2。

不能将带小数点的字符串传递给
int()
。您可以改用
float()
。如果您只需要整数部分,即截断
87.94
中的
.94
,则可以执行
int(float('87.94'))

问题是您试图一次执行两个转换,其中一个是隐式的

下面的方法可行,因为有一种显而易见的方法可以将数字“87”转换为整数87

>>> int('87')
87
出于同样的原因,以下措施也会奏效:

>>> float('87')
87.0
>>> float('87.94')
87.94
>>> int(87.94)
87
记住已经说过的话,看看它们之间的区别:

>>> int(float('87.94'))
87

编译器是否应该为您选择
float()

我不这么认为


无论如何,如果要使用该数字与浮点数进行乘法
0.6
。您可以直接将其转换为

更改此行:

price = int(input())
与:

一切都会好起来的


此外,您在示例中介绍的操作是乘法,而不是除法。如果您可能感兴趣,可以使用floor分区
/
,它将返回一个整数而不是浮点。请看一看,以了解更多有关这方面的信息。

实际上,您可以将浮点值传递给
int()
。在这种情况下,
int()
只需将数字向下舍入,并将该值转换为整数类型

但是,当调用
int(“87.94”)
时,您要做的是将一个类似小数点的字符串传递给
int()
int()
无法直接将此类字符串转换为整数。因此,必须使用
float()
,它可以从字符串转换为浮点。

一个
int
(整数的缩写)是一个整数。
float
(浮点数的缩写)是一个带小数点的数字

int()
返回从其输入参数创建的
int
。您可以使用它将字符串(如
“15”
转换为
int
15
),或将浮点(如
12.059
转换为
int
12

float()
返回从其输入参数创建的
float
。您可以使用它将类似
“10.5”
的字符串转换为
浮点值
10.5
,甚至将类似
12
int
转换为
浮点值
12.0

如果要强制
price
为整数,但要接受浮点数作为键入的输入,则需要先将输入设置为
float
,然后使用
int()
将其转换为:

请注意,如果将
int
乘以
float
,如贴现系数,结果将是
float

还要注意,我上面的例子并没有对数字进行四舍五入——它只是截断小数点后的内容。例如,如果输入为
“0.6”
,则
价格
最终将为
0
。不是你想要的吗?然后您需要首先使用
float
上的
round()
函数

price = int(round(float(input()))
如果您打算使用浮点计算(如果我们讨论的是商品价格,这是有意义的),那么就不要执行
int
转换。只需使用
float
。您可能仍然需要进行一些舍入。如果要四舍五入到小数点后2位,可以使用第二个参数调用四舍五入,如
2

price = round(float(input()),2)

最后,您可能需要研究一下,因为使用浮点数时存在一些限制。更多信息,请参见此处:

如果您正在进行货币计算,您应该研究使用该模块,因为。@Series8217显然,用户是一个大脑:)OP是一个新手,并且仍在学习如何解决错误。
强制执行
错误甚至不是很具有描述性:
类型错误:数字强制执行失败
。非常感谢,您剖析了我怀疑的可能性,甚至还带来了一些我想查找的信息(round())。非常感谢您的解释​​我完全理解我的错误,现在我是一个程序员,好一点了。
price = float(input())
price = int(float(input())
price = int(round(float(input()))
price = round(float(input()),2)
def getPriceDiscount():
    while True:
        try:
            price, percent = float(input()), 0.6
            break
        except ValueError:
            continue
    return price * percent if price > 3000 else price

print(getPriceDiscount())