2014-09-15 6 views
0

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

Вот мой код:

usr_name = raw_input("- Please enter your name: ") 
cash_amt = raw_input("- " + usr_name +", please enter the amount of money to be discounted: $") 
discount_rate = raw_input("- Please enter the desired discount rate: ") 
num_years = raw_input("- Please enter the number of years to discount: ") 
npv = 0.0 

usr_name = str(usr_name) 

cash_amt = float(cash_amt) 
cash_amt = round(cash_amt, 2) 
cash_amt = "{:,}".format(cash_amt) 

discount_rate = float(discount_rate) 
num_years = float(num_years) 
npv = float(npv) 

discount_rate = (1 + discount_rate)**num_years 
npv = round((cash_amt/discount_rate), 2) 
npv = "{:,}".format(npv) 

print "\n" + usr_name + ", $" + str(cash_amt) + " dollars " + str(num_years) + " years from now 
at adiscount rate of " + str(discount_rate) + " has a net present value of $" + str(npv) 

Я получаю "неподдерживаемый тип операнда" привязанную к "NPV = круглый ((cash_amt/discount_rate), 2)", когда я пытаюсь запустить его. Должен ли я конвертировать cash_amt обратно в float после добавления запятых? Благодаря!

+0

Какова точная ошибка в трассировке? –

+0

Я обновил свой вопрос, чтобы показать точную ошибку. Ура! –

+0

переместите 'cash_amt =" {:,} ". Format (cash_amt)' непосредственно перед вашим заявлением на печать, но на самом деле вам нужно просто отформатировать его внутри вашего оператора печати, вы также меняете 'npv' на float и не используете его как вы переназначите его на 'round ((cash_amt/discount_rate), 2)' –

ответ

1

Ваш код может быть сокращен до следующего:

usr_name = raw_input("- Please enter your name: ") 
cash_amt = raw_input("- " + usr_name +", please enter the amount of money to be discounted: $") 
discount_rate = raw_input("- Please enter the desired discount rate: ") 
num_years = raw_input("- Please enter the number of years to discount: ") 

# usr_name is already a string 
cash_amt = float(cash_amt) 
cash_amt = round(cash_amt, 2) 


discount_rate = float(discount_rate) 
num_years = int(num_years) # we want an int to print, discount_rate is a float so our calculations will be ok. 

discount_rate = (1 + discount_rate)**num_years 
npv = round((cash_amt/discount_rate), 2) 


print "\n{}, ${:.2f} dollars {} years from now at discount rate of {:.2f} has a net " \ 
"present value of ${}".format(usr_name,cash_amt,num_years,discount_rate,npv) 

npv = float(npv) фактически никогда не используется, как вы тогда делаете npv = round((cash_amt/discount_rate), 2) без использования первого npv вы присвоить значение.

cash_amt = "{}".format(cash_amt) вызывает ошибку, поэтому вы можете просто удалить ее и выполнить форматирование в своем окончательном заявлении на печать.

+0

Вы абсолютный человек @Padraic. Это работало как прелесть! –

+0

@PhilipMcQuitty, пожалуйста. Я добавил '$ {:. 2f}', поэтому у вас всегда будет два десятичных знака в вашем выпуске, поэтому '4.0' станет' 4.00' и ​​т. Д. –