Подтвердить что ты не робот

В Elixir, как вы форматируете числа со строчной интерполяцией

Я хочу распечатать строку типа

IO.puts("Count: #{my_count}")

Но я хочу, чтобы ведущие нули в выходе выглядели как

Count: 006

Как мне это сделать и где эта документация?

4b9b3361

Ответ 1

Вы можете использовать String.rjust

my_count
|> Integer.to_string
|> String.rjust(3, ?0)

Ответ 2

Я не уверен, что в Elixir существует целочисленное целое с методом форматирования дополнений. Однако вы можете положиться на модуль Erlang io, доступный в Elixir с атомом :io.

iex(1)> :io.format "~3..0B", [6]
006:ok

Вы можете найти объяснение в этом ответе. Я цитирую его здесь для удобства:

"~3..0B" переводится на:

 ~F. = ~3.  (Field width of 3)
  P. =   .  (no Precision specified)
Pad  =  0   (Pad with zeroes)
Mod  =      (no control sequence Modifier specified)
  C  =  B   (Control sequence B = integer in default base 10)

Вы можете либо использовать его напрямую, либо обернуть его в пользовательскую функцию.

iex(5)> :io.format "Count: ~3..0B", [6]
Count: 006:ok

Ответ 3

Вы также можете использовать String.pad_leading/3:

my_count
|> Integer.to_string
|> String.pad_leading(3, "0")

Обратите внимание, что в примечании к выпуску v1.3.0 говорится:

Запутанный API String.ljust/3 и String.rjust/3 был мягко устарел в пользу String.pad_leading/3 и String.pad_trailing/3

Это мягкая усталость. Его использование не вызывает предупреждений.