将整数转换为Erlang中的string

我知道,应该避免Erlangstring不惜一切代价…

但是如果我不这样做,我怎样才能从5中产生“5”?

特别是,有没有像io:format(“〜p”,[5])会返回一个格式化的string,而不是打印到一个stream?

以下可能不是最新的方式,但它的作品:

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

编辑:我发现以下function有用:

 %% 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)). 

编辑2 (回复评论):上面的函数来自一个我写了一个小的程序,而后来学习Erlang。 我正在寻找一个string格式化函数,并在erl发现了io_lib:format/2的行为 – 反直觉的,例如:

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

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

今天晚上,我回到这个程序,并用io_lib:formatreplace上面string_format函数的调用。 这导致的唯一的问题是几个EUnittesting失败,因为他们期望一个扁平的string。 这些很容易修复。

我同意@gleber和@womble使用这个函数是一个整数转换为string矫枉过正。 如果这就是你所需要的,使用integer_to_list/1 。 吻!

还有integer_to_list/1 ,这正是你想要的,没有丑陋。

一个string是一个列表:

 9> integer_to_list(123). "123" 

另外,如果您需要处理浮点数的string表示forms,您应该查看Bob Ippolito在mochinum上所做的工作 。

列表:CONCAT([号码])。 也有效。