Руководство пользователя для GNU Awk
7. Выражения
7.4 Преобразования цепочек и чисел
Цепочки преобразуются в числа и числа преобразуются в цепочки, если этого требует контекст awk-программы. Например, если значение или foo или bar в выражении `foo + bar' окажется цепочкой, оно превращается в число перед выполнением сложения. Если численные значения встречаются при конкатенации цепочек, они превращаются в цепочки.
Рассмотрим следующее:
two = 2; three = 3 print (two three) + 4
Это печатает значение (численное) 27. Численные значения переменных two и three превращаются в цепочки и сцепляются вместе, а цепочка-результат опять преобразуется в число 23, к которому добавляется 4.
Если по какой-то причине нужно принудить число превратиться в цепочку, можно сцепить пустую цепочку "" с этим числом. Чтобы превратить цепочку в число нужно прибавить ноль к этой цепочке.
Цепочка превращается в число при интерпретации любого численного префикса как записи числа: "2.5" превращается в 2.5, "1e3" превращается в 1000, а "25fix" получает численное значение 25. Цепочки, которые нельзя интерпретировать как правильные числа, превращаются в 0. Точные правила, по которым числа превращаются в цепочки, определяются встроенной awk-переменной CONVFMT (см. главу 10 [Встроенные переменные], стр. 115).
Числа преобразуются с помощью функции sprintf (см. раздел 12.3 [Встроенные функции для действий с цепочками], стр. 137) и с CONVFMT как указателем формата. CONVFMT по умолчанию имеет значение "%.6g", которое печатает числа по крайней мере с 6 значащими цифрами. Для некоторых приложений требуется изменять ее для получения большей точности. Двойная точность на большинстве современных машин соответствует 16 или 17 десятичным цифрам. Странные результаты могут получиться, если CONVFMT получит значение, которое не помогает sprintf форматировать правильно числа с плавающей точкой. Например, если вы опустите `%' в формате, все числа будут выдаваться одной и той же постоянной цепочкой. Но если число целое, то результат преобразования будет всегда целым, независимо от значения CONVFMT.
В таком фрагменте кода:
CONVFMT = "%2.2f" a = 12 b = a ""
b получит значение "12", а не "12.00" (d.c.).
До введения стандарта POSIX, awk предусматривало значение OFMT для преобразования чисел в цепочки. OFMT специфицирует выходной формат для печати чисел оператором print. CONVFMT было введено для отделения семантики преобразования от семантики печати. И CONVFMT и OFMT имеют по умолчанию значение "%.6g". В подавляющем большинстве случаев старые awk-программы не изменят своего поведения. Однако, такое использование OFMT нужно держать в памяти, если вы переносите вашу программу на другую реализацию awk; мы рекомендуем вместо изменения программы переносить сам gawk! См. раздел 6.1 [Оператор print], стр. 61, для полной информации об операторе print.
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|