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


110

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

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

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

Ответы:


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, преобразование строки в число и преобразование этого числа обратно в строку. Кроме того, (возможно) человеку легко понять, что код пытается сделать с первого взгляда.
Дэвид Хемпи


8

Попробуйте это, должно сработать:

abc= 5
puts "%.2i" %abc   >> 05


abc= 5.0
puts "%.2f" %abc   >> 5.00

Потрясающе, именно то, что я искал. Доступна ли какая-либо документация или как вы узнали о ней?
RajG 06

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.