在长生不老药中使浮点数变圆的最佳方法是什么

Rob*_*ion 12 math floating-point elixir elixir-iex

我正在尝试将 e 中的 a 舍Float入到小数点后两位。

如果我有数字12.555,我希望我的舍入函数返回12.56

我最初认为这Float.round是我想要的,但这个函数并不总是返回我想要的答案。

例如...

iex()> Float.round(12.555, 2)
12.55
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过临时功能完成这项工作,但我认为必须有更好的解决方案。

我目前的解决方案是...

iex()> round(12.555 * 100) / 100
12.56
Run Code Online (Sandbox Code Playgroud)

这可以完成工作,但就像我说的那样,我只是想知道是否有更好的解决方案。

提前致谢

Ada*_*hip 12

由于浮点数的工作方式,如果您想要精度,包括控制舍入算法,则需要使用诸如Decimal 之类的库:

12.555
|> Decimal.from_float()
|> Decimal.round(2)
Run Code Online (Sandbox Code Playgroud)

输出:

#Decimal<12.56>
Run Code Online (Sandbox Code Playgroud)

然后您可以使用诸如Decimal.to_string/2打印或 之类的功能Decimal.to_float/1,但要注意这to_float/1也是一个不精确的操作并且可能会失败。