Elixir:浮动到格式化字符串

时间:2018-02-04 06:26:16

标签: string floating-point elixir

我在codewars中做了一个简单的代码kata,解决了以下问题:

  

系列:1 + 1/4 + 1/7 + 1/10 + 1/13 + 1/16 + ......

我有关于此类测试的错误:

series sum (6.0ms)
  1) test series sum (TestSeries)
     fixture:6
     Assertion with == failed
     code: sum(0) == "0.00"
     lhs:  '0.00'
     rhs:  "0.00"
     stacktrace:
       fixture:7 

Elixir,'0.00'"0.00"是否有所不同?

将float格式化为字符串是这样的难题吗?:

# My Solution
defmodule Series do
  def sum(n) do
    n
    |> gen_series
    |> do_sum
    |> make_format
  end

  def gen_series(n) do
    if n == 0 do
      [0.00]
    else
      for x <- 1..n, do: 1/(1+3*(x-1))
    end
  end

  def do_sum(series) do
    series
    |> Enum.reduce(&(&1+&2))
  end

  def make_format(sum) do
    :io_lib.format("~.2f", [sum])
    |> Enum.at(0)
  end
end

1 个答案:

答案 0 :(得分:1)

  

它们在Elixir中是不同的,&#39; 0.00&#39;和&#34; 0.00&#34;?

是的,他们是

单引号文字是charlist,它是代码点列表。

将float转换为字符串使用以下内容:

def make_format(sum) do
    :io_lib.format("~.2f", [sum])
    # use to_string instead of Enum.at(0) which returns charlist
    |> to_string()
end