确定字符串是否包含Ruby中的Integer或Float

时间:2015-07-22 16:35:00

标签: ruby

假设我将一些输入作为字符串,我想知道它是否包含IntegerFloat

例如:

input_1 = "100"
input_2 = "100.0123"

现在,我们考虑以下因素:

input_1.respond_to?(:to_f) # => true 
input_1.is_a?(Float)       # => false
input_1.is_a?(Fixnum)      # => false
input_1.to_f?              # => 100.0

input_2.respond_to?(:to_i) # => true
input_2.is_a?(Integer)     # => false
input_2.is_a?(Fixnum)      # => false
input_2.to_i               # => 100

在上述情况中,我们无法确定字符串是包含Integer还是Float。 Ruby中有没有办法确定字符串是否包含FixnumFloat

4 个答案:

答案 0 :(得分:6)

执行此操作的正确方法是IntegerFloat方法。

Integer("100")
100
Integer("1.03")
# ArgumentError: invalid value for Integer(): "1.03"
Float("1.03")
1.03
Float("1.2e9")
1200000000.0
Float("100")
100.0

您可以像这样制作方法:

class String
  def is_int?
    Integer(self) && true rescue false
  end

  def is_float?
    Float(self) && true rescue false
  end
end

答案 1 :(得分:0)

这样的事情应该捕捉到将数字表示为字符串的各种方式:

%w[
  1
  1.0
  0xDEADBEEF
  0b1010
  1e10
  1.2e10
  -1
  -1.2
  a1
  a1.0
].each do |str|
  type = begin
           :integer if Integer(str)
         rescue ArgumentError
           begin
            :float if Float(str)
           rescue ArgumentError
            :neither
           end
         end
  type # => :integer, :float, :integer, :integer, :float, :float, :integer, :float, :neither, :neither
end

答案 2 :(得分:0)

如果字符串是整数或浮点数的表示(即,如果可以通过将整数或浮点数转换为str来获得字符串str):

def integer_or_float?(str)
  :integer if Integer(str) rescue :float
end

integer_or_float? "-123"  #=> :integer
integer_or_float? "12.3"  #=> :float
integer_or_float? "1.2e9" #=> :float

如果字符串可能不是整数或浮点数的表示形式:

def integer_or_float?(str)
  :integer if Integer(str) rescue (:float if Float(str) rescue nil)
end

integer_or_float? "-123"  #=> :integer
integer_or_float? "12.3"  #=> :float
integer_or_float? "1.2e9" #=> :float
integer_or_float? "1.2x"  #=> :nil

答案 3 :(得分:-2)

您可以使用正则表达式:

n = '100.0'

if n =~ /\A\d+\z/
  puts 'integer'
elsif n =~ /\A\d+\.\d+\z/
  puts 'float'
else
  puts 'not integer or float'
end

编辑正则表达式。