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
-2. However, this is dependent on OS services and on representation error (since e.g.
0.15is 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
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
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.