July 05, 2020# Working With Currency in JavaScript

## IEEE-754 Floating Points

## Solution: Convert Floats Into Integers

One client needed me to simply add two products together displaying the total for a new feature to "*add both to cart*"... not so simple of a task. When it comes to floating point values, JavaScript isn't so great at math. Just as as quick example:

```
12.99 + 11.00
> 23.990000000000002
```

This is because of the IEEE Standard for Floating-Point Arithmetic. I ended up down this rabbit hole to better understand it, but ultimately I decided to work around it.

I had a few attempts before I got to this, but so far this is the safest way I'm aware of. `Math.ceil()`

can also be used to round up in case I accidentally display a discounted price as well to be safe.

```
((productOnePrice + productTwoPrice) * 100 / 100).toFixed(2);
// > ####.##
```

So to break this down, I first needed these to be whole numbers.

```
let productOnePrice = 12.99;
let productTwoPrice = 11;
productOnePrice + productTwoPrice
> 23.990000000000002
var total = productOnePrice * 100 + productTwoPrice * 100;
> 2399
```

So far it's been added correctly and if we divide by 100 again it will be fine.

```
total / 100
> 23.99
```

However! What if there were zeros in place of .99?

```
let productOnePrice = 1.1;
let productTwoPrice = 2.2;
var total = (productOnePrice * 100 + productTwoPrice * 100) / 100;
> 3.3
```

This doesn't work because it needs to be set to the hundredths place. This is why `toFixed`

is used. At first I tried using `toPrecision`

, but it wasn't as well as I needed it to be.

```
var total = ((productOnePrice * 100 + productTwoPrice * 100) / 100).toFixed(2); // hundredths place
> 3.30
```

So now we have our ideal total to display to the user. Like I said, I'm pretty nervous about JavaScript handling totals for me so this is why I applied `ceil`

. It's not needed, but I don't want to give a *'Karen'* any reason to yell at my client over a few cents. It's more ideal if an API can provide this total for me without having to do this, but ya know... I would also recommend storing everything as whole numbers `1299`

and converting by dividing by 100, using `toFixed`

when a price needs to be shown.

If you're wanting to see how IEEE-754 works, here are the following resources: