レールの先行ゼロ


152

私のアプリケーションにはフィールドhrとがありmin、両方とも整数です。以下のためhrのフィールドは、ユーザーが入力した場合、「1」は、私はそれをデータベースに保存する前にそれを「01」に自動的にパッドへのRailsをしたいと思います。またmin、ユーザーが「0」を入力した場合、フィールドには「00」と入力する必要があります。

これどうやってするの?

回答:


336

それを整数として保存し、実行時に説明したように表示する方がよいでしょう。すべての言語には、ゼロを埋め込む独自の方法があります。Rubyの場合は、String#rjustを使用できます。このメソッドは、指定された埋め込み文字を使用して、文字列(右寄せ)が指定された長さになるように埋め込みます。

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

場合integerの長さよりも大きい場合str、新しい返すString長さのintegerstr右揃えをし、で埋め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'

60

あなたは整数をそのような文字列に変換することができます:

result_string = '%02i' % your_integer

これは、データベースに保存される方法とは無関係です。


20

これも非常に便利です。

"%.2d" % integer

結果の文字列は2文字で、数値が2文字未満の場合、0が文字列に存在します


8

01整数として保存することはできません。に変換されます1

文字列として保存したり、文字列 "01"として表示したりできます


4
整数として保存し、文字列として表示する(0を埋め込む)ことをお勧めします。ApacheのJava StringUtilsには、そのような素晴らしいpadメソッドがありました。パディングでこのスレッドを見つけました:ruby-forum.com/topic/82137
McStretch

6

私は%演算子が好きですが、好まれなくなったようです...

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

3

これを実現する別の方法は、sprintfを使用して、表示時に整数を埋め込むことです。

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

-5

これを試して、あなたはそれらを一致するように変更することができます

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

1
正確にif num < 0 && num > -1は何ですか?
Francisco Quintero 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.