(gawk.info.gz) Arithmetic Ops
Conversion of Strings and Numbers
Strings are converted to numbers and numbers are converted to
strings, if the context of the `awk' program demands it. For example,
if the value of either `foo' or `bar' in the expression `foo + bar'
happens to be a string, it is converted to a number before the addition
is performed. If numeric values appear in string concatenation, they
are converted to strings. Consider the following:
two = 2; three = 3
print (two three) + 4
This prints the (numeric) value 27. The numeric values of the
variables `two' and `three' are converted to strings and concatenated
together. The resulting string is converted back to the number 23, to
which 4 is then added.
If, for some reason, you need to force a number to be converted to a
string, concatenate the empty string, `""', with that number. To force
a string to be converted to a number, add zero to that string. A
string is converted to a number by interpreting any numeric prefix of
the string as numerals: `"2.5"' converts to 2.5, `"1e3"' converts to
1000, and `"25fix"' has a numeric value of 25. Strings that can't be
interpreted as valid numbers convert to zero.
The exact manner in which numbers are converted into strings is
controlled by the `awk' built-in variable `CONVFMT' ( Built-in
Variables). Numbers are converted using the `sprintf' function with
`CONVFMT' as the format specifier ( String Manipulation Functions
`CONVFMT''s default value is `"%.6g"', which prints 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, 17
digits is enough to capture a floating-point number's value exactly,
most of the time.(1)
Strange results can occur if you set `CONVFMT' to a string that
doesn't tell `sprintf' how to format floating-point numbers in a useful
way. For example, if you forget the `%' in the format, `awk' converts
all numbers to the same constant string. As a special case, if a
number is an integer, then the result of converting it to a string is
_always_ an integer, no matter what the value of `CONVFMT' may be.
Given the following code fragment:
CONVFMT = "%2.2f"
a = 12
b = a ""
`b' has the value `"12"', not `"12.00"'. (d.c.)
Prior to the POSIX standard, `awk' used the value of `OFMT' for
converting numbers to strings. `OFMT' specifies the output format to
use when printing numbers with `print'. `CONVFMT' was introduced in
order to separate the semantics of conversion from the semantics of
printing. Both `CONVFMT' and `OFMT' have the same default value:
`"%.6g"'. In the vast majority of cases, old `awk' programs do not
change their behavior. However, these semantics for `OFMT' are
something to keep in mind if you must port your new style program to
older implementations of `awk'. We recommend that instead of changing
your programs, just port `gawk' itself. The `print' Statement
Print, for more information on the `print' statement.
---------- Footnotes ----------
(1) Pathological cases can require up to 752 digits (!), but we
doubt that you need to worry about this.
(gawk.info.gz) Arithmetic Ops
automatically generated byinfo2html