Ruby on Rails: как добавить нули перед числом, если оно меньше 10?

110

Я хочу преобразовать однозначные числа в двузначные числа следующим образом:

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

Я полагаю, что мог бы поставить кучу операторов if-else (если число меньше 10, то сделайте gsub), но считаю, что это ужасное кодирование. Я знаю, что в Rails есть number_with_precision, но я вижу, что это применимо только к десятичным числам. Любые идеи о том, как преобразовать однозначные числа в двузначные?

sjsc
источник

Ответы:

142

Вы имели в виду sprintf '%02d', n?

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

Возможно, вы захотите сослаться на таблицу форматовsprintf в будущем, но для этого конкретного примера это '%02d'означает напечатать целое число ( d), занимающее не менее 2 символов ( 2), и заполнение слева нулями вместо пробелов ( 0).

Марк Рушаков
источник
Спасибо, Марк !! Идеально =) Спасибо!
sjsc
Вероятно, вам следует использовать %02iв этом случае, поскольку более очевидно, что вывод является и должен быть целым числом, d менее интуитивно понятен для людей, которые не так привыкли к использованию sprintf.
SeanJA
Вы можете просто '%02d'%1без sprintf
Qiushi Huang
194

Много людей , использующих sprintf(что это правильно делать), и я думаю , что если вы хотите сделать это для строки , лучше иметь в виду rjustи ljustметоды:

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

Это обеспечит выравнивание по "4"правому краю, обеспечив 2длину не менее символов и дополнив его '0'. ljustделает наоборот.

Райан Бигг
источник
2
Это лучше, чем sprintf, только если вы хотите разрешить строки. В противном случае я бы использовал sprintf, поскольку он генерирует исключение (как и должно), если я случайно использую строку.
Велизар Христов
Если вы знаете, что начинаете со строкового представления числа, мне это нравится больше, чем sprintf для производительности. Использование rjustпозволяет избежать затрат на анализ строки формата sprintf, преобразование строки в число и преобразование этого числа обратно в строку. Кроме того, (возможно) человеку легко понять, что код пытается сделать с первого взгляда.
Дэвид Хемпи