在Elixir中,如何使用字符串插值格式化数字

Mat*_*att 27 elixir

我想打印出一个字符串

IO.puts("Count: #{my_count}")
Run Code Online (Sandbox Code Playgroud)

但是我希望输出中的前导零如

Count: 006
Run Code Online (Sandbox Code Playgroud)

我该怎么做,文档在哪里?

Dmi*_*kyy 42

您可以使用 String.pad_leading/3

my_count
|> Integer.to_string
|> String.pad_leading(3, "0")
Run Code Online (Sandbox Code Playgroud)

  • 我认为使用`String.pad_leading(3,"0")`会更清楚. (2认同)

Sim*_*tti 17

我不确定Elixir中是否存在带填充格式化程序方法的整数到字符串.但是,您可以依赖Elix io模块,该模块可以使用:io原子在Elixir中访问.

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

你可以在这个答案中找到解释.为方便起见,我在这里引用它:

"~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)
Run Code Online (Sandbox Code Playgroud)

您可以直接使用它,也可以将其包装在自定义函数中.

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

  • 绊倒我的是`:io.format`将格式化的字符串输出到组长并返回`:ok`.如果你需要在输出之前捕获字符串或者只是寻找类似`sprintf`的东西,你需要`:io_lib.format`,它将返回二进制文件/ Elixir`String.t` (11认同)

Tsu*_*omu 12

您还可以使用String.pad_leading/3:

my_count
|> Integer.to_string
|> String.pad_leading(3, "0")
Run Code Online (Sandbox Code Playgroud)

请注意,v1.3.0的发行说明说:

令人困惑的String.ljust/3和String.rjust/3 API已被软弃用,转而支持String.pad_leading/3和String.pad_trailing/3

这是一种软弃用.它的使用不会发出警告.