当我调用输入为十进制的int(input())时,为什么会出现错误(例如'87 .94')?

时间:2012-03-01 19:14:17

标签: python math multiplication

我是编程新手,在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。

5 个答案:

答案 0 :(得分:5)

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

但是,当您调用int("87.94")时,您正在执行的操作是将类似小数点值的字符串传递给int()int()无法直接从这样的字符串转换为整数。因此,您必须使用float(),它可以从字符串转换为浮点数。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

问题在于您尝试一次进行两次转换,其中一次是隐式的

以下方法有效,因为有一种明显的方法可以将数字'87'转换为整数87.

>>> int('87')
87

出于同样的原因,以下内容也适用:

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

请记住所说的内容并查看以下内容之间的区别:

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

>>> int('87.94')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '87.94'

如您所见,问题是您在传递给float()之前暗示了int()转换,但编译器怎么猜呢?字符串'87 .94'有很多可用的工作转换。在找出哪个onw可以与int一起使用之前,编译器是否应该尝试所有这些?如果有两个或更多会返回一些可以使用整数的东西呢?

示例:

>>> int(hash('87.94'))
4165905645189346193
>>> int(id('87.94'))
22325264
>>> int(max('87.94'))
9
>>> int(input('87.94'))
87.94111
111

编译器是否应该为您选择float()
我不这么认为:Explicit is better than implicit


无论如何,如果您打算使用该数字来执行与浮点数0.6的乘法运算。您可以直接将其转换为float()

更改此行:

price = int(input())

使用:

price = float(input())

一切都会好的。

此外,您在示例中显示的操作是乘法,而不是除法。如果您可能感兴趣,则会有一个分区//,它将返回一个浮点数的整数。请查看PEP238以获取更多有关此信息的信息。

答案 3 :(得分:1)

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

int()返回从其输入参数创建的int。您可以使用它将"15"之类的字符串转换为int 15,或将float转换为12.059 int {{1 }}

12返回从其输入参数创建的float()。您可以使用它将float之类的字符串转换为"10.5" float,甚至将10.5转换为int 12 {{ 1}}。

如果要强制float为整数,但是想要接受浮点数作为类型输入,则需要先输入12.0,然后将其转换为{ {1}}:

price

请注意,如果您将float乘以int()(例如折扣因子),结果将为price = int(float(input())

另请注意,上面的示例并未对数字进行舍入 - 它只是截断小数点后的内容。例如,如果输入为int,则float最终将为float。不是你想要的?然后,您需要首先使用"0.6"上的price功能。

0

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

int

最后,您可能希望查看Python's decimal module,因为使用浮点数时存在限制。有关详细信息,请参阅此处:http://docs.python.org/tutorial/floatingpoint.html

答案 4 :(得分:1)

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())