Node:Conversion, Next:, Previous:Variables, Up:Expressions

### 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` (see Built-in Variables). Numbers are converted using the `sprintf` function with `CONVFMT` as the format specifier (see 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. See The `print` Statement, 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.