【问题标题】:How to convert an integer to a string in Erlang?如何在 Erlang 中将整数转换为字符串?
【发布时间】:2010-10-09 22:27:03
【问题描述】:

我知道 Erlang 中的字符串使用起来可能很昂贵。那么如何将"5"转换为5呢?

有没有类似io:format("~p",[5]) 的东西会返回格式化字符串而不是打印到流中?

【问题讨论】:

  • 不惜一切代价避免?你从哪里得到这个想法的?存在一些性能问题和其他烦恼,但它们仍然是核心数据类型和字符串的默认选择。
  • 我说的话是在脸颊上。如果我坚信你永远不应该使用它们,我就不会问这个问题。另一方面,在我看来,将它们描述为“核心数据类型”可能有点牵强。
  • erlang 中的字符串是一个列表。它是核心数据类型。与二进制或原子相同。

标签: string erlang


【解决方案1】:

还有integer_to_list/1,它完全符合你的要求,没有丑陋。

【讨论】:

  • 我认为你的意思是 list_to_integer/1 和 list_to_float/1 因为他试图从一个字符串变成一个数字。此外,这些函数的文档“很难找到”,因为它们都是 Erlang 模块的一部分,您需要知道才能查看。
  • 他正在尝试将 5 转换为“5”。因此,整数到字符串。
  • 字符串是 erlang 中的列表
【解决方案2】:

字符串是一个列表:

9> integer_to_list(123).  
"123"

【讨论】:

    【解决方案3】:

    以下可能不是最简洁的方法,但它有效:

    1> lists:flatten(io_lib:format("~p", [35365])).
    "35365"
    

    编辑:我发现以下功能很有用:

    %% string_format/2
    %% Like io:format except it returns the evaluated string rather than write
    %% it to standard output.
    %% Parameters:
    %%   1. format string similar to that used by io:format.
    %%   2. list of values to supply to format string.
    %% Returns:
    %%   Formatted string.
    string_format(Pattern, Values) ->
        lists:flatten(io_lib:format(Pattern, Values)).
    

    EDIT 2(回应cmets):上面的函数来自我前阵子学习Erlang写的一个小程序。我正在寻找一个字符串格式化函数,发现io_lib:format/2erl 内的行为违反直觉,例如:

    1> io_lib:format("2 + 2 = ~p", [2+2]).
    [50,32,43,32,50,32,61,32,"4"]
    

    当时,我不知道@archaelus 提到的输出设备的“自动扁平化”行为,因此得出结论认为上述行为不是我想要的。

    今天晚上,我回到这个程序,将上面对string_format 函数的调用替换为io_lib:format。这导致的唯一问题是一些 EUnit 测试失败,因为他们期待一个扁平的字符串。这些很容易解决。

    我同意@gleber 和@womble 的观点,即使用此函数将整数转换为字符串是多余的。如果您只需要这些,请使用integer_to_list/1。亲!

    【讨论】:

    • 这个简单的任务绝对不需要使用io_lib:format/2integer_to_list/1 就够了。
    • 另外,扁平化生成的 iolist 通常是浪费的。 Sockets/Ports/Files/IoDevices 都在输出上变平,所以自己变平是多余的。
    • integer_to_list/1 对于标题问题来说已经足够了,但这确实很好地回答了我的“你能用插值生成格式化字符串”子问题......
    • 很遗憾,这是选择的答案,因为womble的答案是正确的。
    【解决方案4】:

    顺便说一句,如果您需要处理浮点数的字符串表示,您应该查看 Bob Ippolito 在 mochinum 上所做的 work

    【讨论】:

      【解决方案5】:

      lists:concat([Number])。也有效。

      【讨论】:

        猜你喜欢
        • 2021-10-13
        • 2010-10-13
        • 1970-01-01
        • 1970-01-01
        • 2015-04-19
        相关资源
        最近更新 更多