Ruby编程:如何判断用户输入的数字是Integer还是Float?
Ruby判断输入为整数或浮点数的解决方法
问题根源
你用gets.chomp获取的输入本质是String字符串对象,所以不管输入的是数字还是其他内容,num.is_a? Float或num.is_a? Integer永远返回false——因为它的类型就是String,这是你判断失效的核心原因。
解决方案
方法1:正则匹配字符串格式(直接判断输入结构)
通过正则表达式匹配输入的字符串格式,无需转换即可区分整数和浮点数:
print "Enter Value: " input = gets.chomp # 匹配纯数字(整数,不含小数点) if input.match?(/^\d+$/) puts "Number is an integer" # 匹配带小数点的数字(浮点数) elsif input.match?(/^\d+\.\d+$/) puts "Number is a float" else puts "Invalid number format" end
- 正则
/^\d+$/:匹配开头到结尾都是数字的字符串,比如"123" - 正则
/^\d+\.\d+$/:匹配包含一个小数点、前后都是数字的字符串,比如"123.45"
方法2:类型转换+异常处理(兼顾转换后的类型与原始输入)
如果需要实际得到数字对象,可通过转换+异常处理实现,同时避免把"5.0"这类带小数点的输入误判为整数:
print "Enter Value: " input = gets.chomp begin # 尝试转换为整数 num = Integer(input) # 检查原始输入是否含小数点,区分"5"和"5.0" if input.include?('.') puts "Number is a float" else puts "Number is an integer" end rescue ArgumentError # 转整数失败,尝试转浮点数 begin num = Float(input) puts "Number is a float" rescue ArgumentError # 转浮点数也失败,说明不是有效数字 puts "Invalid number format" end end
补充说明
- 如果不需要严格区分
"5"和"5.0",可以简化逻辑:转整数成功则为整数,否则转浮点数成功则为浮点数。 - 两种方法都需要考虑无效输入的情况(比如输入字母、符号等),避免程序崩溃。
内容的提问来源于stack exchange,提问作者Annas
相关产品推荐
相关产品推荐

