1

这是我试图计算利息的代码

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,那么我会将该行乘以数次。我如何处理红宝石中的算术?

4

2 回答 2

2

gets将返回一个带有\n. 你的current_balanceinterest_rate变量是字符串,如"11\n" "0.05\n". 所以如果你只使用interest_rate.to_i. string 和 fixnum 之间的运算符*会根据 fixnum 重复该字符串几次。尝试将它们都转换为浮点数。

current_balance = gets.to_f
interest_rate = gets.to_f
...
current_balance *= (1+interest_rate)
于 2012-09-13T03:16:44.883 回答
0

我也是一个新的 Ruby 程序员,一开始在数据类型方面遇到了麻烦。一个非常有用的故障排除工具是obj.inspect准确确定变量的数据类型。

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

希望这可以帮助!

于 2012-09-13T15:15:16.723 回答