ERLANG - двоичная строка в целое или с плавающей точкой - PullRequest
8 голосов
/ 01 декабря 2010

У меня есть двоичные строки в виде:

<<"5.7778345">>

или

<<"444555">>

Я не знаю заранее, будет ли это число с плавающей точкой или целое число.

Я попытался проверить, является ли оно целым числом.Не работает, так как это двоичный файл.И попытался преобразовать двоичный файл в список, а затем проверить, если int или float.Не так уж и много успеха.

Это должна быть такая функция, как

binToNumber(Bin) ->
  %%Find if int or float
  Return.

У кого-нибудь есть хорошая идея, как это сделать?

Все лучшее

Ответы [ 3 ]

19 голосов
/ 01 декабря 2010

Нет быстрого способа сделать это.Вместо этого используйте что-то вроде этого:

bin_to_num(Bin) ->
    N = binary_to_list(Bin),
    case string:to_float(N) of
        {error,no_float} -> list_to_integer(N);
        {F,_Rest} -> F
    end.

Это должно преобразовать двоичный файл в список (строку), а затем попытаться поместить его в число с плавающей точкой.Когда это не может быть сделано, мы возвращаем целое число.В противном случае мы оставляем поплавок и возвращаем его.

12 голосов
/ 02 декабря 2010

Это шаблон, который мы используем:

binary_to_number(B) ->
    list_to_number(binary_to_list(B)).

list_to_number(L) ->
    try list_to_float(L)
    catch
        error:badarg ->
            list_to_integer(L)
    end.
0 голосов
/ 01 декабря 2010

Функция binary_to_term и ее аналог term_to_binary, вероятно, вам пригодятся.

...