провідні нулі в рейки


152

У моєму додатку є поля hrта minобидва цілих числа. Для hrполя, якщо користувач вводить "1", я хотів би, щоб Rails автоматично переклав його на "01", перш ніж зберігати його в базі даних. Також для minполя, якщо користувач вводить "0", він повинен бути введений як "00".

Як я можу це зробити?

Відповіді:


336

Було б краще зберігати його як ціле число і просто відображати його так, як ви описали під час виконання. У кожної мови є свій спосіб підбити нулі - для Ruby ви можете використовувати String # rjust . Цей метод вкладає рядок (обґрунтований правою), щоб він став заданою довжиною, використовуючи заданий символ прокладки.

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

Якщо integerбільше, ніж довжина str, повертає нову Stringдовжину integerз strправильним виправданням і застебнутим 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'


20

Це також досить зручно:

"%.2d" % integer

Рядок, що виходить, матиме 2 символи, і якщо число менше 2 символів, то 0 буде присутній у рядку


8

Ви не можете зберігати 01як ціле число. Він буде перетворений на1

Ви можете зберігати його як рядок або ви можете показувати його як рядок "01"


4
Зберігати його як ціле число та показувати його як рядок (з додаванням 0) було б моєю рекомендацією. Java StringUtils Apache мав такий приємний метод накладки. Знайдено цю тему на набиванні: 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?
Франсіско Кінтеро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.