Rails 3或Ruby是否有内置方法来检查变量是否为整数?
例如,
1.is_an_int #=> true
"dadadad@asdasd.net".is_an_int #=> false?
答案 0 :(得分:252)
您可以使用is_a?
方法
>> 1.is_a? Integer
=> true
>> "dadadad@asdasd.net".is_a? Integer
=> false
>>
答案 1 :(得分:48)
如果你想知道某个对象是Integer
还是可以有意义地转换为整数的东西(不包括"hello"
之类的东西,{{1将转换为to_i
):
0
答案 2 :(得分:29)
在字符串上使用正则表达式:
def is_numeric?(obj)
obj.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true
end
如果您想检查变量是否属于某种类型,您只需使用kind_of?
:
1.kind_of? Integer #true
(1.5).kind_of? Float #true
is_numeric? "545" #true
is_numeric? "2aa" #false
答案 3 :(得分:15)
如果您不确定变量的类型(它可能是一串数字字符),请说它是一个传递给参数的信用卡号,所以它最初是一个字符串,但你想确定它没有任何字母字符,我会使用这种方法:
def is_number?(obj)
obj.to_s == obj.to_i.to_s
end
is_number? "123fh" # false
is_number? "12345" # true
@Benny指出对这种方法的疏忽,记住这一点:
is_number? "01" # false. oops!
答案 4 :(得分:5)
有var.is_a? Class
(在您的情况下:var.is_a? Integer
);这可能符合法案。或者有Integer(var)
,如果无法解析它,它将抛出异常。
答案 5 :(得分:4)
您可以使用三等号。
if Integer === 21
puts "21 is Integer"
end
答案 6 :(得分:3)
更“鸭子打字”的方式是使用respond_to?
这种方式“类似整数”或“字符串式”类也可以使用
if(s.respond_to?(:match) && s.match(".com")){
puts "It's a .com"
else
puts "It's not"
end
答案 7 :(得分:2)
如果您不需要转换零值,我发现方法to_i
和to_f
非常有用,因为它们会将字符串转换为零值(如果不是可转换或零)或实际Integer
或Float
值。
"0014.56".to_i # => 14
"0014.56".to_f # => 14.56
"0.0".to_f # => 0.0
"not_an_int".to_f # 0
"not_a_float".to_f # 0.0
"0014.56".to_f ? "I'm a float" : "I'm not a float or the 0.0 float"
# => I'm a float
"not a float" ? "I'm a float" : "I'm not a float or the 0.0 float"
# => "I'm not a float or the 0.0 float"
EDIT2:小心,0
整数值不是假的,它的真实性(!!0 #=> true
)(感谢@prettycoder)
修改
啊刚发现黑暗的情况......似乎只有在数字位于第一位置时才会发生
"12blah".to_i => 12
答案 8 :(得分:1)
module CoreExtensions
module Integerable
refine String do
def integer?
Integer(self)
rescue ArgumentError
false
else
true
end
end
end
end
后来,在你上课:
require 'core_ext/string/integerable'
class MyClass
using CoreExtensions::Integerable
def method
'my_string'.integer?
end
end
答案 9 :(得分:0)
在尝试确定某些内容是字符串还是任何类型的数字之前,我遇到了类似的问题。我尝试过使用正则表达式,但这对我的用例来说并不可靠。相反,您可以检查变量的类以查看它是否是Numeric类的后代。
if column.class < Numeric
number_to_currency(column)
else
column.html_safe
end
在这种情况下,您还可以替换任何数字后代:BigDecimal,Date :: Infinity,Integer,Fixnum,Float,Bignum,Rational,Complex
答案 10 :(得分:0)
基本上,一个整数 n 是 3 的幂,如果存在一个整数 x 使得 n == 3x。 >
所以要验证你可以使用这个函数
def is_power_of_three(n)
return false unless n.positive?
n == 3**(Math.log10(n)/Math.log10(3)).to_f.round(2)
end