我在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
答案 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