13

我想检查数字是否是偶数!我尝试了以下方法:

a = 4.0
a.is_a? Integer

=> false

a.even?

=> undefined method for Float

那么如何检查数字是否是偶数?

4

3 回答 3

18

如果您不确定您的变量是否在小数点后有任何内容,并且想在转换为整数以检查奇数/偶数之前进行检查,您可以执行以下操作:

a = 4.6
b = 4.0

puts a%1==0 && a.to_i.even? #=> false
puts b%1==0 && a.to_i.even? #=> true

此外,如果你想创建一个偶数?Float 类的方法:

class Float
  def even?
    self%1==0 && self.to_i.even?
  end
end

a = 4.6
b = 4.0

a.even? #=> false
b.even? #=> true
于 2013-08-10T15:54:15.760 回答
4

让它成为一个Integer然后:

a = 4.0
a.to_i == a && a.to_i.even?  #=> true
于 2013-08-10T15:42:29.950 回答
2

请记住数字是如何转换的:

(4.0).to_i # same as Integer(4.0)
=> 4
(4.5).to_i
=> 4
(4.9).to_i
=> 4

使用round可能更安全:

(4.0).round
=> 4
(4.5).round
=> 5
(4.9).round
=> 5

那么你当然可以打电话给even@Yu Hao 写道:

(4.5).round.even?
=> false

您还可以轻松观察已知的浮动“特征”:

(4.499999999999999).round.even?
=> true
(4.4999999999999999).round.even?
=> false
于 2013-08-10T15:49:40.053 回答