How to convert a binary string to an integer or a float?

后端 未结 4 1771
梦谈多话
梦谈多话 2021-02-08 01:56

I have binary strings in the form of either:

<<"5.7778345">>

or

<<"444555">>


        
相关标签:
4条回答
  • 2021-02-08 02:13

    This is the pattern that we use:

    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 讨论(0)
  • 2021-02-08 02:14

    Intermediate conversion to list is unnecessary since Erlang/OTP R16B:

    -spec binary_to_number(binary()) -> float() | integer().
    binary_to_number(B) ->
        try binary_to_float(B)
        catch
            error:badarg -> binary_to_integer(B)
        end.
    
    0 讨论(0)
  • 2021-02-08 02:23

    The binary_to_term function and its counterpart term_to_binary would probably serve you well.

    0 讨论(0)
  • 2021-02-08 02:25

    No quick way to do it. Use something like this instead:

    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.
    

    This should convert the binary to a list (string), then try to fit it in a float. When that can't be done, we return an integer. Otherwise, we keep the float and return that.

    0 讨论(0)
提交回复
热议问题