【问题标题】:leading zeros in rails导轨中的前导零
【发布时间】:2011-08-14 04:56:35
【问题描述】:

我的应用程序中有字段hrmin,这两个字段都是整数。对于hr 字段,如果用户输入“1”,我希望Rails 在将其保存到数据库之前自动将其填充为“01”。对于min 字段,如果用户输入“0”,它应该输入为“00”。

我该怎么做?

【问题讨论】:

    标签: ruby regex ruby-on-rails-3


    【解决方案1】:

    最好将其存储为整数并按照您在运行时的描述显示它。每种语言都有自己的补零方式——对于 Ruby,您可以使用 String#rjust。此方法使用给定的填充字符填充字符串(右对齐),使其变为给定长度。

    str.rjust(integer, padstr=' ') → new_str

    如果integer 大于str 的长度,则返回一个长度为integer 的新Stringstr 右对齐并用padstr 填充;否则,返回str

    some_int = 5
    some_int.to_s.rjust(2, '0')  # => '05'
    some_int.to_s.rjust(5, '0')  # => '00005'
    
    another_int = 150
    another_int.to_s.rjust(2, '0') # => '150'
    another_int.to_s.rjust(3, '0') # => '150'
    another_int.to_s.rjust(5, '0') # => '00150'
    

    【讨论】:

      【解决方案2】:

      你可以将整数转换成这样的字符串:

      result_string = '%02i' % your_integer
      

      这与它在数据库中的保存方式无关。

      【讨论】:

        【解决方案3】:

        这也很方便:

        "%.2d" % integer
        

        结果字符串为 2 个字符,如果数字少于 2 个字符,则字符串中将出现 0

        【讨论】:

          【解决方案4】:

          您不能将01 存储为整数。它将被转换为1

          可以将其存储为字符串,也可以将其显示为字符串“01”

          【讨论】:

          • 将其存储为整数并将其显示为字符串(用 0 填充)将是我的建议。 Apache 的 Java StringUtils 有一个很好的 pad 方法。在 padding 上找到这个线程:ruby-forum.com/topic/82137
          【解决方案5】:

          我喜欢 % 运算符,尽管它似乎已经失宠...

          2.0.0-p247 :001 > '%02i' % 1
           => "01"
          2.0.0-p247 :002 > '%2i' % 1
           => " 1"
          2.0.0-p247 :003 > '%-2i' % 1
           => "1 "
          

          【讨论】:

            【解决方案6】:

            实现此目的的另一种方法是在显示时填充整数,使用 sprintf:

            f = sprintf '%04d', 49
            # f = "0049"
            

            【讨论】:

              【解决方案7】:

              试试这个,你可以改变它们以匹配

              def numeric92(num)
                if num.present?
                  if num < 0 && num > -1
                    ('-%05d' % num) + '.' + ('%.2f' % num).split('.').last
                  else
                    ('%06d' % num) + '.' + ('%.2f' % num).split('.').last
                  end
                else
                  '000000.00'
                end
              end
              

              【讨论】:

              • if num &lt; 0 &amp;&amp; num &gt; -1 到底是什么?
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-02-16
              • 2014-10-23
              • 1970-01-01
              相关资源
              最近更新 更多