编写一个程序,从用户那里得到一个数字,并用ruby来识别它是整型还是浮点型

wztqucjr  于 2022-11-22  发布在  Ruby
关注(0)|答案(2)|浏览(101)

我正在尝试:
打印“输入值“num =获取.chomp

也尝试了。有点?但没有效果

如果num.is_a?浮动
print“数字为浮点数“

也尝试了。有点?但没有效果

否则num.is_a?整数
print“数字为整数“
结束

yi0zb3m4

yi0zb3m41#

这里你的问题是gets返回一个String,你可以根据你链接String#chomp的事实来确定这一点,这会删除尾部的“分隔符”,默认情况下是返回字符(换行符),例如

num = gets.chomp # User enters 1 
#=> "1"

为了将此String转换为数值,您可以通过to_ito_f显式转换它,但您要尝试确定它是哪一个。
考虑到这一要求,我建议使用Kernel#IntegerKernel#Float,因为这些方法对如何处理这种转换有严格的要求。

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

**注意:**如果String无法转换为所需的对象,则使用exception: false会导致这些方法返回nil,否则两个方法都将引发ArgumentError。此外,当我说这些方法对转换非常严格时,一个简单的示例是Integer("1.0") #=> ArgumentError,因为虽然1 == 1.0,但1.0本身是Float,因此不是Integer

omhiaaxx

omhiaaxx2#

以下是一些例子:
第一个
需要注意的是,#print不是打印到屏幕的正确方法。正确的方法是#puts。因此,您的代码将如下所示:

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

我怀疑#gets会返回一个字符串,这意味着您需要首先将字符串转换为数字。

相关问题