manpagez: man pages & more
info gawk
Home | html | info | man
[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

D.3.1 The String Value Can Lie

Internally, awk keeps both the numeric value (double precision floating-point) and the string value for a variable. Separately, awk keeps track of what type the variable has (see section Variable Typing and Comparison Expressions), which plays a role in how variables are used in comparisons.

It is important to note that the string value for a number may not reflect the full value (all the digits) that the numeric value actually contains. The following program (‘values.awk’) illustrates this:

 
{
   sum = $1 + $2
   # see it for what it is
   printf("sum = %.12g\n", sum)
   # use CONVFMT
   a = "<" sum ">"
   print "a =", a
   # use OFMT
   print "sum =", sum
}

This program shows the full value of the sum of $1 and $2 using printf, and then prints the string values obtained from both automatic conversion (via CONVFMT) and from printing (via OFMT).

Here is what happens when the program is run:

 
$ echo 3.654321 1.2345678 | awk -f values.awk
-| sum = 4.8888888
-| a = <4.88889>
-| sum = 4.88889

This makes it clear that the full numeric value is different from what the default string representations show.

CONVFMT’s default value is "%.6g", which yields a value with at least six significant digits. For some applications, you might want to change it to specify more precision. On most modern machines, most of the time, 17 digits is enough to capture a floating-point number’s value exactly.(85)


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]
© manpagez.com 2000-2024
Individual documents may contain additional copyright information.