【问题标题】:Ruby Fixnum comparisonRuby Fixnum 比较
【发布时间】:2012-11-22 01:51:43
【问题描述】:

从 Web 服务收集数据后,我试图只提取那些特定字段的值 > 0 的记录。我正在检查的字段是 FixNum 字段。我尝试过多种类似 .nil 的方法?或 > 0 等。但它们似乎都不起作用。

代码如下:

 results.each do |r|
    # puts "came"
     if r['efforRemaining'] % 1 != 0 #i tried r['efforRemaining'].nil? ..
    # i have values like 0.4, 0.5 etc for the field, hence i need to check if the value is greater than 0 or not only
       puts "came!"
      puts "#{r['mstone']} ... #{r['assignee']['id']} ... #{r['effortRemaining'].to_f}"
     end
  end 

有人可以告诉我怎么做吗? 谢谢,

【问题讨论】:

  • 如果r['efforRemaining']Fixnumr['efforRemaining'] % 1总是0
  • 该值是否确定存储为Fixnum(即不是字符串)?当你puts r['effortRemaining'].inspect 时你会得到什么
  • @AndyH,我得到“nil”或值(4 或“.01”)
  • 如果这是您的实际代码,有一个错字可以解释您的问题:'efforRemaining' 应该是 'effortRemaining',不是吗?

标签: ruby-on-rails ruby fixnum


【解决方案1】:

如果puts r['effortRemaining'].inspect 出现在引号中,则表示它是一个字符串,您需要在比较之前将其转换为数字。

这应该可行:

if r['effortRemaining'].to_f > 0

【讨论】:

  • 引发错误:未定义方法 `>' for false:FalseClass (NoMethodError) 但是,我找到了解决方法:if !r['effortRemaining'].to_s.empty?这很好用!
  • to_f在什么情况下返回false?
  • 对不起,我没有得到你。能详细点吗?
  • 您描述的NoMethodError 发生是因为您正在执行false > 0 之类的操作,如果r['effortRemaining'].to_f 返回false,就会发生这种情况。除了我不明白这是怎么发生的,to_f 应该总是返回一个数字...nil.to_f"not a number".to_f 都返回 0.0,而不是 false。
猜你喜欢
  • 2015-08-23
  • 2013-05-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多