我试图将Float
中的长生不老药四舍五入到小数点后两位。
如果我有数字12.555
,我希望我的舍入函数返回12.56
我本来以为Float.round
是我想要的,但是此功能并不总是返回我想要的答案。
例如...
iex()> Float.round(12.555, 2)
12.55
我知道我可以使用一个临时函数来完成此任务,但是我认为必须有一个更好的解决方案。
我当前的解决方案是...
iex()> round(12.555 * 100) / 100
12.56
这可以完成工作,但是就像我说的,我只是想知道是否有更好的解决方案。
预先感谢
答案 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