# Why is Rounding so Difficult?

I was today years old when I learned that the way I learned to round in school was not how everyone rounded. I was taught that the value 1.65, when rounded to one decimal point, would result in 1.7.

Today I was manually calculating gross wages and payroll liabilities to automate a billing process at work. I noticed that several of the calculations were off by a penny and I could not figure out what was causing the issue. That is when I started to look into R’s `round()` function I was using.

Below is the issue I found in when scouring for penny rounding errors.

A quick google search was pretty enlightening. I had no idea there were different rounding standards.

Apparently, the way I learned to round only applies to commerce and money. That’s when I read about the international standard (ISO 60559) that deals “… formats and methods for floating-point arithmetic in computer systems.”

When looking at the documentation for the `round()` function, it states this:

“Note that for rounding off a 5, the IEC 60559 standard (see also ‘IEEE 754’) is expected to be used, ‘go to the even digit’. Therefore `round(0.5)` is `0` and `round(-1.5)` is `-2`. However, this is dependent on OS services and on representation error (since e.g. `0.15` is not represented exactly, the rounding rule applies to the represented number and not to the printed number, and so `round(0.15, 1)` could be either `0.1` or `0.2`).”

I’m still not clear on why `round(1902.115, 2)` results in the correct rounding of `1092.12`, but when you wrap the round function around a calculation, the result is the incorrect rounding of the value.

Both of the fields in my data frame that are used in the calculation are numeric:

``````\$ ts_pay_rate    : num  36 35.9 143.8 499.5 13.9 ...
\$ ts_hrs_units   : num  80 80 1 1 80 1.75 80 70 1 11 ...

> dat\$ts_pay_rate
 38.0423
> dat\$ts_hrs_units
 50``````

## Conclusion

So rounding with calculations in R when using the round() function can be problematic when the evaluation digit is a 5. When you feed the round function a number, it rounds the values as expected.

My workaround for this issue works for me since I’m exporting the data to an Excel file. Instead of rounding the calculation to two digits, I round it to three, and let Excel do the rounding for me.

It’s not perfect, and I hope that I can find an answer to my question I posed on Reddit, but for now, it works.