代码之家  ›  专栏  ›  技术社区  ›  tsdbrown

Ruby专家:您能帮助/建议改进这一行Ruby代码吗?

  •  1
  • tsdbrown  · 技术社区  · 17 年前

    下面是该值可能包含的三个确切示例:

    1. " 5.344"
    2. " -.977"

    请注意,字符串中有空格、小数点前面没有“0”前缀和双引号。一旦我的字段变量中有了每个变量,这就是我目前正在做的:

    int_val = BigDecimal(value_as_string.gsub(/-\./,"-0.").gsub(/\"/,'').strip).round(0).to_i
    

    3 回复  |  直到 17 年前
        1
  •  7
  •   Chris Doggett    17 年前
    def round(s)
        s.to_f.round
    end
    
    round("5.344") # 5
    round("-2.345") # -2
    round("-.977") # -1
    
        2
  •  1
  •   Pablo Martinez Pablo Martinez    17 年前

    此表达式将清除字符串,删除第一个gsub和第二个gsub中除数字,-或小数点以外的所有字符,并在前添加0。(保留-符号(如果存在)

    some_value.gsub(/[^-\.0-9]/, '').gsub(/^(-?)(\.)/,'\10\2')
    

    然后你需要把它四舍五入,四舍五入就足够了。所以最后一件事看起来是这样的

    def myround(value)
      value.gsub(/[^-\.0-9]/, '').gsub(/^(-?)(\.)/,'\10\2').to_f.round
    end
    
        3
  •  0
  •   A.Ali    17 年前
    def round(str)
      val = BigDecimal(str.gsub(/-\./,"-0.").gsub(/\"/,'').strip)
    
      if val < 0 then
        return val.floor.to_i
      else
        return val.ceil.to_i
      end
    end
    
    推荐文章