print " Enter Value "
num = gets.chomp
if Integer(num, exception: false)
puts "#{num} is an Integer"
elsif Float(num, exception: false)
puts "#{num} is a Float"
else
puts "#{num} is neither an Integer or a Float"
end
if num.is_a?(Float)
puts 'Number is a float.'
elsif num.is_a?(Integer)
puts 'Number is an integer.'
else
puts 'Number is neither a float nor an integer.'
end
2条答案
按热度按时间yi0zb3m41#
这里你的问题是
gets
返回一个String
,你可以根据你链接String#chomp
的事实来确定这一点,这会删除尾部的“分隔符”,默认情况下是返回字符(换行符),例如为了将此
String
转换为数值,您可以通过to_i
或to_f
显式转换它,但您要尝试确定它是哪一个。考虑到这一要求,我建议使用
Kernel#Integer
和Kernel#Float
,因为这些方法对如何处理这种转换有严格的要求。**注意:**如果
String
无法转换为所需的对象,则使用exception: false
会导致这些方法返回nil
,否则两个方法都将引发ArgumentError
。此外,当我说这些方法对转换非常严格时,一个简单的示例是Integer("1.0") #=> ArgumentError
,因为虽然1 == 1.0
,但1.0
本身是Float
,因此不是Integer
omhiaaxx2#
以下是一些例子:
第一个
需要注意的是,
#print
不是打印到屏幕的正确方法。正确的方法是#puts
。因此,您的代码将如下所示:我怀疑
#gets
会返回一个字符串,这意味着您需要首先将字符串转换为数字。