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

时间:2019-04-08 19:10:27

标签: math floating-point elixir iex

我试图将Float中的长生不老药四舍五入到小数点后两位。

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

我本来以为Float.round是我想要的,但是此功能并不总是返回我想要的答案。

例如...

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

我知道我可以使用一个临时函数来完成此任务,但是我认为必须有一个更好的解决方案。

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

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

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

预先感谢

2 个答案:

答案 0 :(得分: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也是一种不精确的操作,并且可能会失败。

答案 1 :(得分:0)

如果您不想使用库,Float.ceil / 2可能会帮助您解决此问题

iex> 12.555 |> Float.ceil(2)        
12.56