www.delorie.com/gnu/docs/gawk/gawk_176.html search
The GNU Awk User's Guide

 [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ]

### 13.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 x 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) } ```

 webmaster delorie software   privacy Copyright © 2003   by The Free Software Foundation Updated Jun 2003