Man, rounding numbers in R had me scratching my head this morning. Needed it for some simple sales data analysis, but things weren’t turning out right. Grabbed my first coffee, fired up RStudio, and decided to tackle it head-on.

The Frustrating Start
So I had this vector of ugly numbers:
my_prices <- c(12.345, 67.891, 3.1415, 98.765)
Just needed clean whole numbers for reporting. First instinct? Used trunc() like a total newbie. Bad idea. Trunc just chops off decimals – trunc(12.345) spat out 12, but trunc(67.891) gave me 67 even though 67.891 should round up. Felt dumb. Coffee cup #2 already.

Discovering the Basics
Finally remembered basic school rounding rules need the round() function. Tried it:
round(my_prices)
Got 12, 68, 3, 99. Yes! Perfect. Simple cases handled. Then my brain wondered – what about decimals? Like showing dollars and cents? Stared at the console feeling proud.

Tried controlling decimal places:
round(12.345, digits = 1)
Got 12.3. Okay cool. Then:

round(12.345, digits = 2)
Gave me 12.35 – exactly right. Felt like victory.
Getting Fancy (and Messing Up)
Got cocky. Decided to test negative numbers. Made up fake temperature data:

temps <- c(-1.5, -2.5, 1.5, 2.5)
Punched in round(temps). Expected symmetric rounding. R said: -2, -2, 2, 2. Whoa. Both -1.5 and -2.5 rounded down to -2? School rules say -1.5 should round up to -1! Panicked for a sec. Checked documentation. Turns out R uses “round to even” rule. Still confused me. Needed alternative solutions.
Finding Floor and Ceiling
Searched for ways to force rounding direction.

- floor(): Tried floor(-1.5) got -2. floor(1.5) gave 1. Always down. Useful for guarantees.
- ceiling(): ceiling(-1.5) surprised me – gave -1. ceiling(1.5) gave 2. Always up. Better for strict upwards rounding.
Felt relief. Now I could control the direction reliably.
Putting It All Together
Final test run combined everything:
raw_data <- c(15.499, 15.5, -7.8, -8.2, 3.14159)
# Basic rounding

rounded_default <- round(raw_data)
# Two decimals
rounded_cents <- round(raw_data, digits = 2)

# Always down
rounded_down <- floor(raw_data)
# Always up
rounded_up <- ceiling(raw_data)
Printed each result side-by-side. Finally understood which tool does what. Major forehead slap moment. Took me longer than expected, but hey, that’s coding. Sigh of relief as coffee #3 kicked in.