Ruby on Rails: come si aggiungono zeri davanti a un numero se è inferiore a 10?


110

Sto cercando di convertire numeri a una cifra in numeri a due cifre in questo modo:

9 ==> 09
5 ==> 05
12 == 12
4 ==> 04

Immagino che potrei mettere un mucchio di istruzioni if-else (se il numero è inferiore a 10, quindi fare un gsub) ma immagino che sia una codifica orribile. So che Rails ha number_with_precision ma vedo che si applica solo ai numeri decimali. Qualche idea su come convertire le cifre singole in due cifre?

Risposte:


142

Volevi dire sprintf '%02d', n?

irb(main):003:0> sprintf '%02d', 1
=> "01"
irb(main):004:0> sprintf '%02d', 10
=> "10"

Potresti voler fare riferimento alla tabella di formato persprintf in futuro, ma per questo particolare esempio '%02d'significa stampare un intero ( d) che occupa almeno 2 caratteri ( 2) e il riempimento a sinistra con zeri invece di spazi ( 0).


Grazie Marco !! Perfetto =) Grazie!
sjsc

Probabilmente dovresti usare %02iper questo caso poiché è più ovvio che l'output è e dovrebbe essere un numero intero, d è meno intuitivo per le persone che non sono abituate a usare sprintf.
SeanJA

puoi semplicemente '%02d'%1senza sprintf
Qiushi Huang

194

Molte persone usano sprintf(che è la cosa giusta da fare) e penso che se vuoi farlo per una stringa è meglio tenere a mente i metodi rjuste ljust:

"4".rjust(2, '0')

Ciò renderà il "4"giusto giustificato assicurandosi che sia lungo almeno 2caratteri e riempirlo con '0'. ljustfa l'opposto.


2
Questo è solo meglio di sprintf se vuoi consentire le stringhe. Altrimenti userò sprintf, poiché genera un'eccezione (come dovrebbe) se uso accidentalmente una stringa.
Velizar Hristov

Se sai che stai iniziando con una rappresentazione di stringa di un numero, questo mi piace di più di sprintf per le prestazioni. L'uso rjustevita il costo di analizzare la stringa di formato di sprintf, convertire una stringa in un numero e riconvertire quel numero in una stringa. Inoltre, è (probabilmente) facile per un essere umano capire cosa sta cercando di fare il codice a colpo d'occhio.
David Hempy


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.