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"
因此,似乎是从右到左迭代应用舍入,直到达到所需的小数位数为止。
这是预期的行为吗?为什么它不能正确舍入或仅截断?这两种选择对我来说似乎都可以预测。
答案 0 :(得分:10)
这是Erlang中的一个错误,该错误是fixed on Jan 15 2018,最初包含在Erlang 20.3中。如果您升级到Erlang 20.3或更高版本,则"0"
的价格为0.445
。