我试图将elixir中的Float
舍入到小数点后两位。
如果我有数字12.555
,我希望我的舍入函数返回12.56
我原本以为Float.round
就是我想要的,但是这个功能并不总能回复我想要的答案。
例如...
iex()> Float.round(12.555, 2)
12.55
我知道我可以通过临时功能完成这项工作,但我认为必须有更好的解决方案。
我目前的解决方案是......
iex()> round(12.555 * 100) / 100
12.56
这样做的工作就像我说的那样,我只是想知道是否有更好的解决方案。
提前致谢
由于浮点数的工作方式,如果你想要精度,包括控制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
也是一个不精确的操作,可能会失败。