在长生不老药中围绕浮子的最佳方法是什么

问题描述 投票:1回答:1

我试图将elixir中的Float舍入到小数点后两位。

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

我原本以为Float.round就是我想要的,但是这个功能并不总能回复我想要的答案。

例如...

iex()> Float.round(12.555, 2)
12.55

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

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

iex()> round(12.555 * 100) / 100
12.56

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

提前致谢

math floating-point elixir iex
1个回答
3
投票

由于浮点数的工作方式,如果你想要精度,包括控制rounding algorithms,你需要使用像Decimal这样的库:

12.555
|> Decimal.from_float()
|> Decimal.round(2)

输出:

#Decimal<12.56>

然后你可以使用像Decimal.to_string/2这样的函数进行打印或Decimal.to_float/1,但要注意to_float/1也是一个不精确的操作,可能会失败。

© www.soinside.com 2019 - 2024. All rights reserved.