假设我将一些输入作为字符串,我想知道它是否包含Integer
或Float
。
例如:
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中有没有办法确定字符串是否包含Fixnum
或Float
?
答案 0 :(得分:6)
执行此操作的正确方法是Integer
和Float
方法。
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
编辑正则表达式。