【问题标题】:In Elixir, how do you format numbers with string interpolation在 Elixir 中,如何使用字符串插值格式化数字
【发布时间】:2018-06-04 02:19:37
【问题描述】:

我想打印一个字符串

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

但我希望输出中的前导零像

Count: 006

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

【问题讨论】:

    标签: elixir


    【解决方案1】:

    您可以使用String.pad_leading/3

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

    【讨论】:

    • 我觉得用String.pad_leading(3, "0")会更清楚。
    • rjust 已弃用
    【解决方案2】:

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

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

    您可以在this answer 中找到解释。为了方便起见,我在这里引用它:

    "~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
    

    【讨论】:

    • 让我大吃一惊的是:io.format 将格式化的字符串输出给组长并返回:ok。如果您需要在输出之前捕获字符串或者只是在寻找类似sprintf 的内容,您需要:io_lib.format,它将返回二进制/Elixir String.t
    • io_lib.format 返回字符列表而不是二进制文件
    【解决方案3】:

    你也可以使用String.pad_leading/3:

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

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

    令人困惑的 String.ljust/3 和 String.rjust/3 API 已被软弃用,取而代之的是 String.pad_leading/3 和 String.pad_trailing/3

    这是一个软性弃用。它的使用不会发出警告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 2017-11-09
      • 2016-08-30
      • 1970-01-01
      相关资源
      最近更新 更多