这是我的代码试图计算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,那么我会多次乘以该行。我如何处理红宝石中的算术?
答案 0 :(得分:2)
gets
将返回\n
的字符串。您的current_balance
和interest_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
)来将它转换为一个可以使用数学运算符的对象。
希望这有帮助!