2016-08-03 11 views
8

Próbuję dowiedzieć się, w jaki sposób przekonwertować float do string/binarny, ale wydaje się, że nie jest tak proste, jak to wyglądaElixir - Konwersja pływaka na ciąg

iex(1)> to_string(1200.00) 
"1.2e3" 

iex(2)> Float.to_string(1200.00) 
"1.2e3" 

Musimy „1200.00” wyjdzie ... po prostu nie w notacji wykładnik

Odpowiedz

9

Bez dalszych szczegółów na temat swojej usecase, to daje pożądany rezultat:

iex(1)> Float.to_string(1200.00, decimals: 2) 
"1200.00" 

to przy użyciu Erlang na float_to_binary/2 i będzie Amortyz w eliksir 1,4 (https://github.com/elixir-lang/elixir/blob/v1.3.2/lib/elixir/lib/float.ex#L225):

def to_string(float, options) do 
    :erlang.float_to_binary(float, expand_compact(options)) 
end 
+1

Czy jest to udokumentowane w dowolnym miejscu? Widzę tylko [Float.to_string/1] (http://elixir-lang.org/docs/stable/elixir/Float.html#to_string/1). –

+2

Jest nieco ukryty i wkrótce zostanie wycofany: https://github.com/elixir-lang/elixir/blob/v1.3.2/lib/elixir/lib/float.ex#L225 Prawdopodobnie z powodu obaw precyzja dziedziczy w float. W zależności od użycia ta biblioteka https://github.com/ericmj/decimal może mieć znaczenie – splatte

+4

@splatte W tym przypadku powiedziałbym, że możesz edytować odpowiedź, aby uwzględnić funkcję Erlang, która obecnie wywołuje, ponieważ jest to sposób będzie musiał zostać wywołany w przyszłości: ': erlang.float_to_binary (1200,00, dziesiętne: 2)'. –