Начальные нули в Ruby

#ruby #regex #ruby-on-rails-3

#ruby

Вопрос:

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

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

Ответ №1:

Было бы лучше сохранить это как целое число и просто отобразить его, как вы описали во время выполнения. У каждого языка есть свой способ заполнения нулей — для Ruby вы можете использовать строку#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'
  

Ответ №2:

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

 result_string = 'i' % your_integer
  

Это не зависит от того, как они сохраняются в базе данных.

Ответ №3:

Это тоже довольно удобно:

 "%.2d" % integer
  

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

Ответ №4:

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

Вы можете сохранить это как строку, или вы можете отобразить это как строку «01»

Комментарии:

1. Моей рекомендацией было бы сохранить его как целое число и отобразить в виде строки (дополненной 0). В Java StringUtils от Apache был подобный хороший метод заполнения. Нашел эту тему в padding: ruby-forum.com/topic/82137

Ответ №5:

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

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

Ответ №6:

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

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

Ответ №7:

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

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

Комментарии:

1. Что именно if num < 0 amp;amp; num > -1 такое?