2016-08-03 3 views
8

Я пытаюсь выяснить, как преобразовать поплавок строка/двоичный, но кажется, что его не так просто, как это выглядитElixir - Преобразование поплавок в строку

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

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

Нам нужно «1200.00», чтобы выйти ... только не в показателе нотации

ответ

9

Без дополнительной информации о вашем USECASE, это даст вам желаемый результат:

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

Он использует Эрланга float_to_binary/2 и будет Аморт ated in elixir 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

Является ли это документированным где угодно? Все, что я вижу, это [Float.to_string/1] (http://elixir-lang.org/docs/stable/elixir/Float.html#to_string/1). –

+2

Немного скрыто и скоро устареет: https://github.com/elixir-lang/elixir/blob/v1.3.2/lib/elixir/lib/float.ex#L225 Возможно, из-за проблем с точность наследования в поплавках. В зависимости от usecase эта библиотека https://github.com/ericmj/decimal может иметь значение – splatte

+4

@splatte. В этом случае я бы сказал, что вы можете отредактировать свой ответ, чтобы включить функцию Erlang, которую она сейчас вызывает, поскольку это путь, который нужно будет вызвать в будущем: ': erlang.float_to_binary (1200.00, десятичные числа: 2)'. –

Смежные вопросы