Ruby 如何检查变量是整数还是浮点
我想检查我的变量是整数还是浮点。这是一个计算器。我不希望它无限期地循环 我该怎么做?我试着做到以下几点:Ruby 如何检查变量是整数还是浮点,ruby,Ruby,我想检查我的变量是整数还是浮点。这是一个计算器。我不希望它无限期地循环 我该怎么做?我试着做到以下几点: puts "Enter a number: " num1 = gets.chomp() while !(num1 == Integer.superclass or num1 == Float.superclass) puts "Enter an actual number: " num1 = gets.chomp() end 一般来说,有一种选择: 10.class == Inte
puts "Enter a number: "
num1 = gets.chomp()
while !(num1 == Integer.superclass or num1 == Float.superclass)
puts "Enter an actual number: "
num1 = gets.chomp()
end
一般来说,有一种选择:
10.class == Integer # => true
10.5.class == Float # => true
或者,另一个:
10.is_a? Integer # => true
10.5.is_a? Float # => true
但由于输入是一个字符串,因此这可能是检查字符串是整数还是浮点数的一个可行解决方案,可以对字符串
类进行修补:
module StringFloatOrInteger
def integer_or_float?
begin !!Float(self) rescue false end
end
def integer_not_float?
begin !!Integer(self) rescue false end
end
def integer?
integer_not_float? & integer_or_float?
end
def float?
!integer_not_float? & integer_or_float?
end
end
String.include StringFloatOrInteger
"home".integer? # => false
"home".float? # => false
"10".integer? # => true
"10".float? # => false
"10.5".integer? # => false
"10.5".float? # => true
在您的情况下,您可以这样使用,请求n次输入
def get_integer
2.times do # or whatever times
puts "Please enter an integer: "
input = gets.chomp
return input.to_i if input.integer?
end
return nil # or whatever
end
number = get_integer
如果要检查某个变量是否属于某种类型,只需使用种类?:
1.kind_of? Integer #true
(1.5).kind_of? Float #true
由于输入是一个字符串,因此需要首先将其转换为整数或浮点 因此,如果您执行以下操作,并且输入为“hello”,它将返回
0.0
num1 = gets.chomp.to_f
如果希望严格验证它是否为整数,则可以通过
input = gets.chomp
until input.is_a?(Fixnum) do
print "Please enter a number: "
input = Integer(gets.chomp) rescue nil
end
天哪,你让我意识到我做错了什么。如果num1是一封信,那么这句话还能用吗?比方说,如果我输入“a”作为num1,它还会转换成浮点吗?不会,它会返回0.0。检查我添加的开始/救援。你必须营救
ArgumentError
好的,最后一件事,如果我想检查营救是否被解雇,我该怎么做?我已经更新了我的答案,以满足你的要求。希望这能有所帮助?实际上回答了我想问的另一个问题,而且效果更好。非常感谢你。由于Fixnum已被弃用,是否有替代方案。或者它是这样好吗?编辑了我的答案,以防万一:您的变量num1
始终是一个字符串,而不是整数或浮点。get
不解释用户输入,它只返回一个字符串。这完全正确。然而,这并不是OP想要的。