DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(gawk.info) Round Function

Info Catalog (gawk.info) Assert Function (gawk.info) Library Functions (gawk.info) Ordinal Functions
 
 Rounding Numbers
 ================
 
    The way `printf' and `sprintf' ( Using `printf' Statements for
 Fancier Printing Printf.)  do rounding will often depend 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.
 The result is 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 --- do normal rounding
      #
      # Arnold Robbins, arnold@gnu.org, August, 1996
      # Public Domain
      
      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) }
 
Info Catalog (gawk.info) Assert Function (gawk.info) Library Functions (gawk.info) Ordinal Functions
automatically generated byinfo2html