ведущие нули в рельсах - PullRequest
       2

ведущие нули в рельсах

140 голосов
/ 28 апреля 2011

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

Как я могу это сделать?

Ответы [ 7 ]

317 голосов
/ 28 апреля 2011

Было бы лучше сохранить его как целое число и просто отобразить его, как вы описали во время выполнения.Каждый язык имеет свой собственный способ дополнения нулями - для Ruby вы можете использовать String # rjust .Этот метод дополняет строку (выровненную по правому краю), чтобы она стала заданной длины, используя заданный символ заполнения.1011 * больше длины 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'
58 голосов
/ 28 апреля 2011

Вы можете преобразовать целое число в строку такого типа с помощью:

result_string = '%02i' % your_integer

Это не зависит от того, как оно сохраняется в БД.

17 голосов
/ 01 октября 2013

Это также очень удобно:

"%.2d" % integer

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

8 голосов
/ 28 апреля 2011

Вы не можете хранить 01 как целое число.Он будет преобразован в 1

. Вы можете сохранить его в виде строки или в виде строки "01"

6 голосов
/ 20 марта 2016

Мне нравится оператор%, хотя он, похоже, вышел из строя ...

2.0.0-p247 :001 > '%02i' % 1
 => "01"
2.0.0-p247 :002 > '%2i' % 1
 => " 1"
2.0.0-p247 :003 > '%-2i' % 1
 => "1 "
2 голосов
/ 06 мая 2015

Другой способ добиться этого - заполнить целое число во время отображения, используя sprintf:

f = sprintf '%04d', 49
# f = "0049"
0 голосов
/ 13 мая 2014

Попробуйте, и вы можете изменить их, чтобы соответствовать

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...