raylarda önde gelen sıfırlar


152

Uygulamamda alanlar hrve minher iki tamsayı var. İçin hralanında, kullanıcı girerse "1" Ben veritabanına kaydetmeden önce "01" otomatik pad Rails istiyoruz. Ayrıca minalan için kullanıcı "0" girerse "00" olarak girilmelidir.

Bunu nasıl yapabilirim?

Yanıtlar:


336

Bir tamsayı olarak saklamak ve çalışma zamanında açıkladığınız gibi görüntülemek daha iyi olur. Her dilin sıfırları doldurmak için kendine özgü bir yolu vardır - Ruby için String # rjust kullanabilirsiniz . Bu yöntem, belirli bir dolgu karakteri kullanarak belirli bir uzunluk haline gelmesi için bir dizeyi (sağa yaslanmış) doldurur.

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

Eğer integeruzunluğundan daha büyüktür str, yeni döndüren Stringuzunluğu integerile strdoğru haklı ve doldurulur padstr; aksi takdirde geri döner 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'


20

Bu da oldukça kullanışlı:

"%.2d" % integer

Ortaya çıkan dize 2 karakterden oluşur ve sayı 2 karakterden azsa, dizede 0'lar bulunur


8

01Tamsayı olarak saklayamazsınız . Dönüştürülecek1

Bir dize olarak saklayabilir veya "01" bir dize olarak gösterebilirsiniz


4
Bir tamsayı olarak saklayın ve bir dize (0'larla doldurulmuş) olarak göstermek benim tavsiyem olacaktır. Apache'nin Java StringUtils'inde böyle güzel bir ped yöntemi vardı. Bu ipliği dolgu üzerinde buldu: ruby-forum.com/topic/82137
McStretch

6

% Operatörünü seviyorum, her ne kadar lehine gitti gibi görünüyor ...

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

Bunu başarmanın başka bir yolu da sprintf kullanarak tamsayı görüntüleme zamanında doldurmaktır:

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

-5

Bunu deneyin ve bunları eşleşecek şekilde değiştirebilirsiniz

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
Tam olarak if num < 0 && num > -1nedir?
Francisco Quintero
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.