我使用下面的代码来检查一个变量是否不为零

if(discount != nil && discount != 0) 
  ...
end

还有更好的办法吗?


当前回答

if discount and discount != 0
  ..
end

更新,它将为false折扣= false

其他回答

在处理数据库记录时,我喜欢使用迁移帮助器将所有空值初始化为0:

add_column :products, :price, :integer, default: 0

好的,5年过去了....

if discount.try :nonzero?
  ...
end

需要注意的是,try是在ActiveSupport宝石中定义的,所以在普通ruby中不可用。

是的,我们有一条干净的红宝石路。

discount.to_f.zero?

这个检查处理了大量的情况,即折扣可能是nil,折扣可能是int 0,折扣可能是浮动0.0,折扣可能是字符串“0.0”,“0”。

unless [nil, 0].include?(discount) 
  # ...
end

你可以利用NilClass提供的#to_i方法,它将为nil值返回零:

unless discount.to_i.zero?
  # Code here
end

如果折扣可以是小数,则可以使用#to_f来代替,以防止数字四舍五入为零。