czołowe zera w szynach

Mam pola hr i min, obie liczby całkowite w mojej aplikacji. Dla pola hr, jeśli użytkownik wprowadzi "1 "chciałbym, aby Rails automatycznie wstawił go do" 01 " przed zapisaniem go do bazy danych. Również dla pola min jeśli użytkownik wprowadzi "0", powinien umieścić jako"00".

Jak mogę to zrobić?
Author: meagar, 2011-04-28

7 answers

Lepiej jest zapisać go jako liczbę całkowitą i po prostu wyświetlić go tak, jak opisano w uruchomieniu. Każdy język ma swój własny sposób na wstawianie zer-dla Rubiego można użyć String#rjust. Metoda ta blokuje łańcuch (justowany w prawo) tak, że staje się on zadaną długością, używając danego znaku dopełniającego.

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

Jeśli integer jest większa niż długość str, zwraca nową String o długości integer z str prawym uzasadnionym i wyściełanym padstr; w przeciwnym razie zwraca 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'
 300
Author: Jon Gauthier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-29 20:49:04

Możesz przekształcić liczbę całkowitą w łańcuch tego rodzaju za pomocą:

result_string = '%02i' % your_integer

Jest to niezależne od tego, jak zostanie zapisane w db.

 53
Author: J-_-L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-21 07:45:08

Jest to również bardzo przydatne:

"%.2d" % integer

Wynikowy łańcuch będzie miał 2 znaki, a jeśli liczba jest mniejsza niż 2 znaki, to w łańcuchu

 16
Author: Sumit Bisht,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-01 19:08:06

Nie można zapisać 01 jako liczba całkowita. Zostanie przekonwertowany na 1

Możesz zapisać go jako ciąg znaków, lub możesz pokazać go jako ciąg znaków " 01 "

 8
Author: fl00r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-08 23:12:17

Lubię operatora%, chociaż wydaje się, że wyszedł z łaski...

2.0.0-p247 :001 > '%02i' % 1
 => "01"
2.0.0-p247 :002 > '%2i' % 1
 => " 1"
2.0.0-p247 :003 > '%-2i' % 1
 => "1 "
 5
Author: nroose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-20 01:08:16

Innym sposobem, aby to osiągnąć, jest wstawianie liczby całkowitej w czasie wyświetlania, używając sprintf:

f = sprintf '%04d', 49
# f = "0049"
 1
Author: SylvainB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-06 13:22:48

Spróbuj tego, a możesz je zmienić, aby pasowały

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
 -6
Author: Ksaynice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-13 19:15:21