2015-02-15 3 views
4

Я писал программу конвертирования фунтов в доллары. Я столкнулся с некоторыми проблемами, умножающими два числа.Как умножать десятичные разряды в Python

pounds = input('Number of Pounds: ') 
convert = pounds * .56 
print('Your amount of British pounds in US dollars is: $', convert) 

Может ли кто-нибудь сообщить мне код для исправления этой программы?

+0

Что такое сообщение об ошибке вы видите ? Эти три команды работали для меня в интерпретаторе. Какую версию Python вы используете? Подумайте, что произойдет, если кто-то вводит нечисловое значение для фунтов. – kdopen

+0

@kdopen Это будет работать в Python 2, поскольку 'input' является' eval (raw_input (...)) '- поэтому при правильном вводе пользователя, возвращающем _number_, а не _string_. В Python 3 'input' является эквивалентом' raw_input' и всегда возвращает строку. Таким образом, существует необходимость в явном преобразовании. Очень вероятно, что OP использует Python 3, но его код был основан на примере, написанном для Python 2. –

ответ

2
def main(): 
    pounds = float(input('Number of Pounds: ')) 
    convert = pounds * .56 
    print('Your amount of British pounds in US dollars is: $', convert) 

main() 

Если вы используете ввод, вы вводите строку. Вы хотите ввести плавающее число для этих вопросов.

-1

Ваш код работает в моем компьютере, но вы всегда можете сделать это

convert = pound * 56/100 
+0

Если вы хотите, чтобы это было ответом, объясните, почему это было бы лучше, чем orignal (т. Е. Сделать это скорее ответом чем комментарий) – kdopen

8

В Python 3 input возвращает строку. Это в основном эквивалентно raw_input в Python 2. Итак, перед выполнением любых вычислений вам нужно преобразовать эту строку в число. И будьте готовы к «плохим вводам» (то есть нечетным значениям).

Кроме того, для денежных ценностей обычно не хорошая идея использовать поплавки. Вы должны использовать decimal, чтобы избежать ошибок округления:

>>> 100*.56 
56.00000000000001 
>>> Decimal('100')*Decimal('.56') 
Decimal('56.00') 

Все, что приводит к чему-то как что:

import decimal 

try: 
    pounds = decimal.Decimal(input('Number of Pounds: ')) 
    convert = pounds * decimal.Decimal('.56') 
    print('Your amount of British pounds in US dollars is: $', convert) 
except decimal.InvalidOperation: 
    print("Invalid input") 

Производство:

sh$ python3 m.py 
Number of Pounds: 100 
Your amount of British pounds in US dollars is: $ 56.00 

sh$ python3 m.py 
Number of Pounds: douze 
Invalid input 
+0

Я должен настоятельно рекомендовать этот ответ, особенно из-за того, что вы используете десятичное значение вместо float для всех денежных значений. –

Смежные вопросы