如何通过用户输入进行算术运算?

时间:2012-09-13 03:10:06

标签: ruby

这是我的代码试图计算coumpoung兴趣

def coumpoundinterest
 print "Enter the current balance: "
 current_balance = gets
 print "Enter the interest rate: "
 interest_rate = gets
 _year = 2012
 i = 0
 while i < 5 do

  current_balance = current_balance + current_balance * interest_rate
  puts "The balance in year " + (_year + i).to_s + " is $" + current_balance.to_s

  i = i + 1  
 end
end

这是我遇到麻烦的路线

current_balance = current_balance + current_balance * interest_rate

如果我保持代码的方式,我得到一个错误,字符串不能强制进入FixNum。如果我在interest_rate之后添加.to_i,那么我会多次乘以该行。我如何处理红宝石中的算术?

2 个答案:

答案 0 :(得分:2)

gets将返回\n的字符串。您的current_balanceinterest_rate变量是"11\n" "0.05\n"之类的字符串。因此,如果您只使用interest_rate.to_i。字符串和fixnum之间的运算符*将根据fixnum重复多次字符串。尝试将它们转换为浮动。

current_balance = gets.to_f
interest_rate = gets.to_f
...
current_balance *= (1+interest_rate)

答案 1 :(得分:0)

我也是一名新的Ruby程序员,最初遇到数据类型问题。一个非常有用的故障排除工具是obj.inspect,可以准确找出变量的数据类型。

因此,如果在获得用户值后添加current_balance.inspect,则可以很容易地看到返回值为“5 \ n”,这是一个字符串对象。由于Ruby字符串有自己的基本运算符定义(+ - * /),这些不是您所期望的,您需要使用其中一个to_ *运算符(即已提到的to_f)来将它转换为一个可以使用数学运算符的对象。

希望这有帮助!