Erlang float_to_binary奇怪地截断小数

时间:2018-07-18 03:41:27

标签: erlang elixir

Erlang float_to_binary函数会奇怪地截断小数。例如,我希望它会将没有小数位数的0.45转换为"0"。相反,我们得到了(Elixir中的示例):

iex> :erlang.float_to_binary(0.45, [decimals: 0])
"1"
iex> :erlang.float_to_binary(0.445, [decimals: 0])
"1"
> :erlang.float_to_binary(0.444, [decimals: 0])
"0"

因此,似乎是从右到左迭代应用舍入,直到达到所需的小数位数为止。

这是预期的行为吗?为什么它不能正确舍入或仅截断?这两种选择对我来说似乎都可以预测。

1 个答案:

答案 0 :(得分:10)

这是Erlang中的一个错误,该错误是fixed on Jan 15 2018,最初包含在Erlang 20.3中。如果您升级到Erlang 20.3或更高版本,则"0"的价格为0.445