Logo JsDir.com [niente]
Bring Your Site To Life!!!
24 Luglio 2008 - 7:30:21 - 98 scripters on-line! - La tua posizione nel sito: StaffScripts/Script078/
BedInLecce
StaffScripts
printf() - Output formattato in JavaScript

Autore: Maurizio Data: 26/09/2002 Downloads: 1032 Voto: 3,5/5 Download P r o v a


printf() - Output Preformattato

Nel javascript manca una funzione che fornisca un output formattato, presente, invece in quasi tutti i linguaggi. Questa mancanza mette spesso in difficoltà gli utenti meno esperti quando devono stampare un importo in euro, con due cifre decimali; ma anche buoni programmatori non trovano per niente agevole stampare numeri in formati poco usuali come quello esponziale.

printf() è una funzione che cerca di sopperire a questa mancanza, usando una sintassi simile a quella dell'omonoma funzione del C.

Ad esempio, osserviamo la tabella che segue:



Nella prima colonna č riportato un numero fra 1 e 11; i numeri di una sola cifra sono fatti precedere da uno 0.
Nella seconda vi è il logaritmo naturale del numero, formattato con 5 cifre decimali. Nella terza colonna vi è l'esponenziale del numero con 4 cifre decimali. Infine nell'ultima colonna vi è la potenza, in base 12, del numero, stampata in forma esponeziale e con 4 cifre decimali.

La tabella è stata costruita interamente da script con printf() con quest'unica l'istruzione:
for (i = 1; i < 12; i++) printf(' %02d %8.5d %10.4d %5.4e \n', i, Math.log(i),
Math.exp(i), Math.pow(12, i));


La stringa di formato


La sintassi di printf() è la seguente:
printf("stringa di formato", parametro1, parametro2, ...); La stringa di formato può contenere qualsiasi carattere, oltre ai caratteri necessari a formattare i parametri seguenti. Ad esempio, con:
printf("Il risultato &egrave;: %5.2d\n", result); fornirà un output del tipo:
Il risultato è: 132.54 viene, cioè, stampata la stringa di formato; quando viene incontrato il carattere "%", al suo posto viene stampato il corrispondente parametro, secondo il formato specificato dopo il carattere.

Il modello generale del formato è il seguente:
%[ + | - ] [ 0 ] [ n [ .m] ] X I parametri fra parentesi sono opzionali.

Il segno ( + o - ) definisce l'allineamento: con il segno + si ha l'allineamento a destra, con il - a sinistra. L'allineamento di default è a destra ( + ) . Il carattere "|" è l'OR (oppure) e sta a significare che i due segni non possono essere usati contemporaneamente.

Lo "0" (zero) è il carattere di riempimento, utile per i campi numerici. Quando il numero occupa uno spazio minore di quello specificato nel formato, lo spazio rimanente viene riempito di spazi (default) oppure da zeri (se specificato).

Il numero n è il numero minimo di caratteri che devono essere riservati al parametro da stampare. Il numeri di caratteri utilizzati da un parametro potrebbe anche essere superiore ad n, se il parametro li richiede. Ad esempio:
x = 1000;
printf("%2d", x);
occuperà 4 caratteri e non i 2 specificati nel formato.

Il punto seguito da un numero è necessario solo per i numeri decimali; m rappresenta il numero di cifre da stampare dopo il punto decimale. Ad esempio: x = 1000.346;
printf("%6.2d", x);
stamperà il numero 1000.35. Si faccia attenzione che n rappresenta il numero totale di caratteri riservati al parametro, compresi il punto decimale e l'eventuale segno.

Infine X rappresenta il tipo di grandezza da stampare e può essere:
c carattere
d numero
x numero, che verrà stampato in formato esadecimale
o numero, che verrà stampato in formato ottale.
e numero, che verrà stampato in formato esponenziale
s stringa
Il carattere può essere sia minuscolo che maiuscolo.

Il carattere "\n" (new line) verrà convertito in "<BR>".

Per stampare i caratteri speciali (% e \) devono essere preceduti dal segno "%". Quindi %% stamperà un semplice % e non verrà considerato l'inizio di un formato.

Si tenga presente che, per avere effettivamente gli allineamenti desiderati, bisogna utilizzare i caratteri a spaziatura fissa.



Esempi

Torniamo all'esempio della precedente tabella.

Per stampare il numero preceduto dallo 0 se ha meno di 2 cifre è stata usata l'istruzione:
printf("%02d", i);
Come si vede il primo argomento di printf è una stringa (stringa di formato) in cui %02d sta a significare che il numero successivo deve essere stampato occupando 2 caratteri. Lo 0 iniziale indica che, nel caso il numero occupi meno di 2 caratteri, il carattere mancante deve essere riempito con uno 0.

La seconda colonna è stata stampata con:
printf("%8.5d", Math.log(i));
che significa: il logaritmo deve essere stampato occupando in totale 8 caratteri (vcompreso il punto decimale), di cui 5 per le cifre decimali. Il numero, in realtà, occuperà solo 7 caratteri; il carattere supplementare (uno spazio) verrà inserito all'inizio.

La terza colonna è stata stampata con:
printf("%10.4d", Math.exp(i));
dal significato analogo al precedente. Come si vede, però, il numero viene allineato a destra, inserendo tanti spazi quanti sono necessari.

L'ultima colonna è stata stampata con:
printf("%5.4e", Math.pow(10, i));
la "e" nella stringa di formato impone, appunto, la stampa in formato esponenziale. L'esponente viene sempre stampato con il segno e tre caratteri eventualmente rimpiti con lo "0". Il numero deve essere di alemno 5 caratteri in totale, di cui 4 decimali. È evidente che il numero non potrà occupare solo 5 caratteri; il numero verrà stampato senza spazi aggiuntivi per la formattazione.


In questo ulteriore esempio viene stampato il codice HTML per costruire una tabella di nomi, allineando le stringhe a sinistra e i numeri a destra..



Ed è stato ottenuto con
var head = '<table border="1" cellspacing="0" cellpadding="8" align="center">'; var riga = '<tr>' + '<td class="tabx">%-10s</td>' +
'<td class="tabx">%-10s</td>' +
'<td class="tabx">Lire %d</td>' +
'<td class="tabx">&euro; %5.2d</td>' + '</tr>';

var foot = '</table>'; var persone = new Array( "Rossi", "Alberto", 18300,
"Bianchini", "Roberto", 32730,
"Franchi", "Giuseppe", 42750);

printf(head);
for (var i = 0; i < persone.length; i += 3) printf(riga, persone[i], persone[i + 1],
persone[i + 2], persone[i + 2] / 1936.27);
printf(foot);

Lo stesso elenco, con gli stessi allineamenti poteva essere fatto senza costruire la table:




con il più semplice script:
for (var i = 0; i < persone.length; i += 3) printf("%-10s %-10s Lire: %5d   &euro; %5.2d\n", persone[i],
persone[i + 1], persone[i + 2], persone[i + 2] / 1936.27);

Questo'altro esempio mette in evidenza la facilitā con cui si possono fare le conversioni di formato:

La tabella di destra riporta un numero decimale nella prima colonna, il corrispondente esadecimale nella seconda e l'ottale nella terza. Č stata costruita soltanto con le istruzioni:

for (i = 10; i < 24; i += 2) printf("%2d 0x%02x %03o\n", i, i, i);
E infine, dulcis in fundo, il grafico di una sinusoide:



Senza addendrarci nei particolari, la parte centrale dello script è:
for (var i = 0; i < n; i++) { var x = wmax + values(i) * wmax / maxval;
printf('<tr><td>' + row + '</td></tr>', x, bgcol);
}


sprintf

sprintf() formatta una serie di parametri e memorizza il risultato in una stringa. Del tutto analoga a printf(), ha la seguente sintassi:
sprintf(variabile, "stringa di formato", parametro1, parametro2, ...); Ad esempio:
function linkIt(str, url, target) { sprintf(stringa, '<a href="%s" target="%s">%s</a>', url, target, str);
return stringa;
}

a = "Clicca per continuare";
a = linkIt(a, "http://www.jsdir.com", "newwin");


      Per qualsiasi chiarimento sullo script mandate una e-mail a Maurizio




Per navigare correttamente il sito è necessario abilitare i cookies.
Enjoy Open Source!
ffx80bl1

    javascript
 
 
 
         Stampa
          Segnala
          Preferiti





ffx1202