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.