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?

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'


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


8

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

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


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 "

3

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

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

-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

1
Was genau if num < 0 && num > -1ist?
Francisco Quintero
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.