2010-12-01 51 views
7

我有二進制字符串之一:二郎山 - 二進制字符串爲整數或形式漂浮

<<"5.7778345">> 

<<"444555">> 

我不事先知道是否會是一個浮動或整數。

我試着做一個檢查,看它是否是一個整數。因爲它是二進制的,所以不起作用。並嘗試將二進制轉換爲列表,然後檢查int或float。這並沒有太大的成功。

它需要的功能,如

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

任何人對如何做到這一點是一個好主意?

一切順利

回答

18

沒有快速的方法來做到這一點。使用這樣的事情,而不是:

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. 

這應該二進制轉換到一個列表(字符串),然後嘗試,以適應它的浮動。當不能完成時,我們返回一個整數。否則,我們保持浮動並返回。

+0

你可能想list_to_float不串:to_float。 – 2010-12-02 12:00:24

+0

這也是一個有效的方法。可能更快。字符串:to_float將容忍更多垃圾,這可能會或可能不會帶來好處。我贊成你的答案。 – 2010-12-02 12:08:27

-1

binary_to_term功能及其對應term_to_binary可能會爲您服務。

12

這是我們使用的模式:

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.