I am trying to round a Float
in elixir to 2 decimal places.
If I have the number 12.555
, I would like my rounding function to return 12.56
I originally thought that the Float.round
was what I wanted but this function does not always return the answer I would like.
For example...
iex()> Float.round(12.555, 2)
12.55
I know that I can get this done with a makeshift function but I thought that there must be a better solution.
My current solution is...
iex()> round(12.555 * 100) / 100
12.56
This does the job but like I said, I just wanted to know if there was a better solution.
Thanks in advance
Because of the way floating point numbers work, if you want precision, including controlling rounding algorithms, you need to use a library such as Decimal:
12.555
|> Decimal.from_float()
|> Decimal.round(2)
Output:
#Decimal<12.56>
You can then use functions like Decimal.to_string/2
for printing or Decimal.to_float/1
, but beware that to_float/1
is also an imprecise operation and could fail.