Round Function (The GNU Awk User’s Guide)
From Get docs
Gawk/docs/latest/Round-Function
Next: Cliff Random Function, Previous: Assert Function, Up: General Functions [Contents][Index]
10.2.3 Rounding Numbers
The way printf
and sprintf()
(see section Using printf Statements for Fancier Printing) perform rounding often depends upon the system’s C sprintf()
subroutine. On many machines, sprintf()
rounding is unbiased, which means it doesn’t always round a trailing .5 up, contrary to naive expectations. In unbiased rounding, .5 rounds to even, rather than always up, so 1.5 rounds to 2 but 4.5 rounds to 4. This means that if you are using a format that does rounding (e.g., "%.0f"
), you should check what your system does. The following function does traditional rounding; it might be useful if your awk
’s printf
does unbiased rounding:
# round.awk --- do normal rounding function round(x, ival, aval, fraction) { ival = int(x) # integer part, int() truncates # see if fractional part if (ival == x) # no fraction return ival # ensure no decimals if (x < 0) { aval = -x # absolute value ival = int(aval) fraction = aval - ival if (fraction >= .5) return int(x) - 1 # -2.5 --> -3 else return int(x) # -2.3 --> -2 } else { fraction = x - ival if (fraction >= .5) return ival + 1 else return ival } }
# test harness # { print $0, round($0) }