преобразовать целое число в строку в Erlang - PullRequest
55 голосов
/ 26 февраля 2009

Я знаю, что следует избегать строк Эрланга любой ценой ...

но если я не делаю этого, как мне получить "5" из 5?

в частности, есть ли что-нибудь вроде io: format ("~ p", [5]), которое возвращало бы отформатированную строку вместо печати в поток?

Ответы [ 5 ]

145 голосов
/ 26 февраля 2009

Есть также integer_to_list/1, который делает именно то, что вы хотите, без уродства.

28 голосов
/ 29 октября 2009

Строка - это список:

9> integer_to_list(123).  
"123"
14 голосов
/ 26 февраля 2009

Следующее, вероятно, не самый удачный способ, но он работает:

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

РЕДАКТИРОВАТЬ 2 (в ответ на комментарии): вышеуказанная функция была взята из небольшой программы, которую я недавно написал для изучения Erlang. Я искал функцию форматирования строки и обнаружил, что поведение io_lib:format/2 в erl нелогично, например:

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. ПОЦЕЛУЙ!

4 голосов
/ 26 февраля 2009

Кроме того, если вам когда-либо понадобится иметь дело со строковым представлением чисел с плавающей точкой, вы должны взглянуть на работу , которую Боб Ипполито проделал на mochinum .

2 голосов
/ 09 марта 2011

списки: CONCAT ([Number]). тоже работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...