Successivo: Localizzazione e conversioni, Su: Conversione [Contenuti][Indice]
awk
converte tra stringhe e numeriLe stringhe sono convertite in numeri e i numeri sono convertiti in stringhe,
se il contesto del programma awk
lo richiede. Per esempio, se il
valore di pippo
o pluto
nell’espressione ‘pippo + pluto’
è una stringa, viene convertita in un numero prima di eseguire l’addizione.
Se in una concatenazione di stringhe ci sono valori numerici, questi sono
convertiti in stringhe. Si consideri il seguente esempio:
due = 2; tre = 3 print (due tre) + 4
Stampa il valore (numerico) di 27. I valori numerici delle
variabili due
e tre
sono convertiti in stringhe e
concatenati insieme. La stringa risultante è riconvertita nel
numero 23, al quale poi viene aggiunto 4.
Se, per qualche ragione, si vuole forzare la conversione di un numero in
una stringa, basta concatenare a quel numero la stringa nulla, ""
.
Per forzare la conversione di una stringa in un numero, basta aggiungere zero
a quella stringa. Una stringa viene convertita in un numero interpretando
qualsiasi prefisso numerico della stringa come numero:
"2.5"
si converte in 2.5, "1e3"
si converte in 1000, e
"25fix"
ha un valore numerico di 25.
Le stringhe che non possono essere interpretate come numeri validi vengono
convertite al valore zero.
Il modo esatto in cui i numeri sono convertiti in stringhe è controllato dalla
variabile predefinita di awk
CONVFMT
(vedi la sezione Variabili predefinite). I numeri vengono convertiti usando la
funzione sprintf()
con CONVFMT
come specificatore di formato
(vedi la sezione Funzioni di manipolazione di stringhe).
Il valore di default di CONVFMT
è "%.6g"
, che crea un valore con
un massimo di sei cifre significative. Per alcune applicazioni potrebbe essere
opportuno cambiare questo valore per ottenere una maggiore precisione.
Sulla maggior parte delle macchine moderne
normalmente bastano 17 cifre per esprimere esattamente il valore di un numero
in virgola mobile.31
Si possono avere strani risultati se si imposta CONVFMT
a una stringa
che non indica a sprintf()
come formattare i numeri in virgola mobile
in un modo utile. Per esempio, se ci si dimentica la ‘%’ nel formato,
awk
converte tutti i numeri alla stessa stringa costante.
Come caso particolare, per un numero intero, il risultato della conversione
a una stringa è sempre un numero intero, indipendentemente da quale
sia il valore di CONVFMT
. Dato il seguente fammento di codice:
CONVFMT = "%2.2f" a = 12 b = a ""
b
ha valore "12"
, non "12.00"
.
(a.b.)
awk prima di POSIX usava OFMT per la conversione di stringhe
Prima dello standard POSIX, |
Per casi eccezionali possono essere richieste fino a 752 cifre (!), non sembra che sia il caso di preoccuparsene qui.
Successivo: Localizzazione e conversioni, Su: Conversione [Contenuti][Indice]