führende Nullen in Schienen

152

Ich habe Felder hrundmin beide Ganzzahlen in meiner Anwendung. hrWenn der Benutzer für Feld "1" eingibt, möchte ich, dass Rails es automatisch auf "01" auffüllt, bevor es in der Datenbank gespeichert wird. Auch für das minFeld, wenn der Benutzer "0" eingibt, sollte es als "00" eingegeben werden.

Wie kann ich das machen?

ed1t
quelle

Antworten:

336

Es ist besser, es als Ganzzahl zu speichern und es einfach so anzuzeigen, wie Sie es zur Laufzeit beschrieben haben. Jede Sprache hat ihre eigene Art, Nullen aufzufüllen - für Ruby können Sie String # rjust verwenden . Diese Methode füllt eine Zeichenfolge (rechtsbündig) mit einem bestimmten Auffüllzeichen so auf, dass sie eine bestimmte Länge erreicht.

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

Wenn integergrößer als die Länge von ist str, wird eine neue StringLänge integermit strrechtsbündig und aufgefüllt mit zurückgegeben padstr. Andernfalls wird zurückgegeben 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'
Jon Gauthier
quelle
60

Sie können die Ganzzahl in eine Zeichenfolge dieser Art umwandeln mit:

result_string = '%02i' % your_integer

Dies ist unabhängig davon, wie es in der Datenbank gespeichert wird.

J L
quelle
20

Das ist auch ganz praktisch:

"%.2d" % integer

Die resultierende Zeichenfolge besteht aus 2 Zeichen. Wenn die Zahl weniger als 2 Zeichen beträgt, sind in der Zeichenfolge Nullen vorhanden

Sumit Bisht
quelle
8

Sie können nicht 01als Ganzzahl speichern . Es wird konvertiert zu1

Sie können es als Zeichenfolge speichern oder als Zeichenfolge "01" anzeigen.

fl00r
quelle
4
Speichern Sie es als Ganzzahl und zeigen Sie es als Zeichenfolge (aufgefüllt mit Nullen) wäre meine Empfehlung. Apaches Java StringUtils hatte so eine nette Pad-Methode. Fand diesen Thread auf Polsterung: ruby-forum.com/topic/82137
McStretch
6

Ich mag den% -Operator, obwohl er in Ungnade gefallen zu sein scheint ...

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

Eine andere Möglichkeit, dies zu erreichen, besteht darin, Ihre Ganzzahl zur Anzeigezeit mit sprintf aufzufüllen:

f = sprintf '%04d', 49
# f = "0049"
SylvainB
quelle
-5

Versuchen Sie dies und Sie können sie entsprechend ändern

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
Ksaynice
quelle
1
Was genau if num < 0 && num > -1ist?
Francisco Quintero