在Ruby中划分,错误

时间:2016-10-18 03:11:43

标签: ruby

这是我学习Ruby的第一天。我正在尝试编写一个Ruby程序,询问用户吃饭的成本,然后他们想要提示的百分比,然后进行计算并打印出结果。我写了以下内容:

puts "How much did your meal cost?"
cost = gets
puts "How much do you want to tip? (%)"
tip = gets
tip_total = cost * (tip/100.0)
puts "You should tip $" + tip_total

当我尝试在终端中运行它时,我收到以下错误消息:

ip_calculator.rb:7:in `<main>': undefined method `/' for "20\n":String (NoMethodError)

我不知道此消息的含义,有人可以帮助我理解错误消息和/或我的代码有什么问题吗?谢谢。

2 个答案:

答案 0 :(得分:3)

ip_calculator.rb:7:in `<main>': undefined method `/' for "20\n":String (NoMethodError)
  

我不知道这个消息是什么意思

让我们分解一下:

  • ip_calculator.rb
  • 中出现错误的文件
  • 7行号(可能是tip_total = cost * (tip/100.0)
  • <main>班级(main是Ruby的顶级班级)
  • "undefined method `/' for "20\n":String"错误消息
  • NoMethodError例外类(http://ruby-doc.org/core/NoMethodError.html
  

有人可以帮助我理解错误消息

错误消息"undefined method `/' for "20\n":String"表示您尝试在对象/上调用方法"20\n",该方法是String并且此对象未实现这样的方法:

"20\n" / 100
#=> NoMethodError: undefined method `/' for "20\n":String
  

我的代码出了什么问题?

Kernel#gets返回一个字符串。 gets不会尝试解释您的输入,只会传递收到的字符。如果在终端中键入 2 0 return ,则gets将返回包含相应字符"2"的字符串, "0""\n"

要转换值,我会使用内置转换方法Kernel#IntegerKernel#Float

cost = Float(gets)

to_ito_f不同,如果您输入非数字值,这些方法会引发错误。

答案 1 :(得分:1)

当您从STDIN输入值时,它是String。并且ruby不能将String分成100个。

这是一个有效的例子:

#!/usr/bin/env ruby

puts "How much did your meal cost?"
cost = gets.to_f
puts "How much do you want to tip? (%)"
tip = gets.to_f
tip_total = cost * (tip/100.0)
puts "You should tip $ #{tip_total.round(2)}"

所有输入的值都会转换为Float s,进行计算,然后打印舍入值。

[retgoat@iMac-Roman ~/temp]$ ./calc.rb
How much did your meal cost?
123.45
How much do you want to tip? (%)
12.43
You should tip $ 15.34