RobStallion
RobStallion

Reputation: 1703

What is the best way to round a float in elixir

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

Upvotes: 17

Views: 15840

Answers (2)

BlueGene
BlueGene

Reputation: 1129

Float.ceil/2 might help you with this if you don't want to use a library

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

Upvotes: 6

Adam Millerchip
Adam Millerchip

Reputation: 23091

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.

Upvotes: 17

Related Questions