12

我正在尝试将Float长生不老药中的 a 舍入到小数点后 2 位。

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

我原本以为那Float.round是我想要的,但这个函数并不总是返回我想要的答案。

例如...

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

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

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

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

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

提前致谢

4

2 回答 2

12

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

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

输出:

#Decimal<12.56>

然后,您可以使用Decimal.to_string/2print 或等功能Decimal.to_float/1,但请注意,这to_float/1也是一种不精确的操作,可能会失败。

于 2019-04-08T22:20:05.770 回答
2

如果您不想使用库,Float.ceil/2 可能会帮助您

iex> 12.555 |> Float.ceil(2)        
12.56
于 2019-09-12T03:07:57.390 回答