156 votes

zéros non significatifs dans les rails

J'ai des champs hr et min , les deux entiers de mon application. Pour le champ hr , si l'utilisateur entre "1", j'aimerais que Rails le complète automatiquement en "01" avant de l'enregistrer dans la base de données. De même, pour le champ min , si l'utilisateur entre "0", il doit indiquer "00".

Comment puis-je faire ceci?

352voto

Jon Gauthier Points 10173

Il ferais mieux de stocker un nombre entier et juste l'affichage comme vous l'avez décrit sur l'exécution. Chaque langue a sa propre façon de compléter les zéros - pour Ruby, vous pouvez utiliser la Chaîne de caractères#rjust. Cette méthode plaquettes une chaîne de caractères (justifié à droite), de sorte qu'il devient une longueur donnée, en utilisant un rembourrage personnage.

rjust(integer, padstr=' ') → new_str

Si integer est supérieure à la longueur de l' str, renvoie un nouveau String de la longueur integer avec str justifié à droite et matelassée avec padstr; sinon, renvoie 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(3, '0') # => '150'
another_int.to_s.rjust(5, '0') # => '00150'

62voto

J-_-L Points 4952

Vous pouvez transformer l'entier en une chaîne de ce type avec:

 result_string = '%02i' % your_integer
 

Ceci est indépendant de la façon dont il est enregistré dans la base de données.

Documentation

21voto

Sumit Bisht Points 576

C'est aussi très pratique:

 "%.2d" % integer
 

La chaîne résultante sera de 2 caractères et si le nombre est inférieur à 2 caractères, 0 sera présent dans la chaîne

8voto

fl00r Points 41855

Vous ne pouvez pas stocker 01 sous forme d'entier. Il sera converti en 1

Vous pouvez le stocker en tant que chaîne, ou vous pouvez l'afficher en tant que chaîne "01"

-5voto

Ksaynice Points 1

Essayez ceci et vous pouvez les changer pour qu'ils correspondent

 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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X