我试图创建一个简单的薪资预测程序。
我正在捕获两个变量,然后想要将这些变量相乘。我试过做
pay = payrate * hourrate
但似乎没有用。有人告诉我把pay
放在一个定义中,然后我试着显示变量,但它仍然没有用。当我查看文档时,似乎我正在使用正确的运算符。任何猜测?
# Simple Budgeting Program
puts "What is your budget type?\nYou can say 'Monthly' 'Weekly' or 'Fortnightly'"
payperiod = gets.chomp
case payperiod
when "Monthly"
puts "You are paid monthly"
when "Weekly"
puts "You are paid weekly"
when "Fortnightly"
puts "You are paid every two weeks."
else
puts "You did not input a correct answer."
end
puts "What is your hourly rate?\n"
payrate = gets.chomp
puts "How many hours have you worked during your pay period?\n"
hourrate = gets.chomp
def pay
payrate * hourrate
end
puts "#{pay}"
preventclose = gets.chomp
答案 0 :(得分:3)
def
与此无关。 payrate
和hourrate
是字符串,*
表示字符串非常不同。您需要先使用to_i
或to_f
将其转换为数字。
payrate.to_f * hourrate.to_f
答案 1 :(得分:0)
您将支付率和小时费率声明为字符串。在Ruby中,您不能将字符串乘以其他字符串。但是,在Ruby中有类型转换。 Ruby的字符串类提供了一种将字符串转换为整数的方法。
string = "4"
string.to_i => 4
在您的情况下,首先需要将BOTH字符串转换为整数。
def pay
payrate.to_i * hourrate.to_i
end
这里有关于字符串的一些很好的信息。
http://www.ruby-doc.org/core-2.1.2/String.html
希望这有帮助
答案 2 :(得分:0)
Kernel#gets通常返回一个字符串,而不是整数或浮点数。为了执行数值计算,您需要先将字符串强制转换为数字。有很多方法可以做到这一点,但Kernel#Float方法通常比String#to_i更安全,因为如果不能强制执行字符串,则内核方法会引发异常。例如:
print 'Pay Rate: '
rate = Float(gets.chomp)
print 'Hours Worked: '
print hours = Float(gets.chomp)
当然,对浮点数can be inaccurate进行操作,因此您可能需要考虑使用Kernel#Rational然后转换为输出的浮点数。例如,考虑:
# Return a float with two decimal places as a string.
def pay rate, hours
sprintf '%.2f', Rational(rate) * Rational(hours)
end
p pay 10, 39.33
"393.30"
#=> "393.30"