Python 为什么在调用int(input())时会出现错误,其中输入是十进制的(例如,';87.94';)?
我是一名编程新手,在Python乘法方面有困难。我有这样的代码: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:
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())