在Ruby中乘以变量?

时间:2014-06-24 18:05:14

标签: ruby variables

我试图创建一个简单的薪资预测程序。

我正在捕获两个变量,然后想要将这些变量相乘。我试过做

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

3 个答案:

答案 0 :(得分:3)

def与此无关。 payratehourrate是字符串,*表示字符串非常不同。您需要先使用to_ito_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"
相关问题