Formattare numeri

Da Head First Java O'Reilly, capitolo 10. Parte dedicata alla formattazione dei numeri.

Ci sono svariate possibilità per formattare i numeri in Java.

Ad esempio, se vogliamo inserire punti e virgole tra le cifre, per rendere più leggibile grosse cifre, possiamo usare il metodo statico format() della classe String usando l'opzione ",":

public void commaDecimal() {
String s = String.format("%,11d", 10000000);
System.out.println(s);
}

public void commaFloating() {
String s = String.format("%,14.2f", 10000000.23);
System.out.println(s);
}

public void commaException() {
try {
String s = String.format("%,d", 10000000.23);
System.out.println(s);
}
catch (java.util.IllegalFormatConversionException ifce) {
System.out.println("Can't do that: " + ifce.getMessage());
}
}

public static void main(String[] args) {
Formatting f = new Formatting();

f.commaDecimal();
f.commaFloating();
f.commaException();
}

E il risultato dovrebbe essere questo:

10.000.000
10.000.000,230000
Can't do that: d != java.lang.Double

Da notare che i separatori utilizzati sono funzione della localizzazione utilizzata. Nel mio caso uso i settaggi italiani, e quindi una virgola per i decimali e un punto ogni tre cifre alla sua sinistra.

Il metodo format() opera in modo molto simile alle convenzioni della printf del linguaggio C. Il percento indica di inserire un parametro in quella posizione.

La stringa di formattazione "%,14.2f" va interpretata come: stampa il numero floating point (f) passato come parametro (%) inserendo i separatori (,) visualizzando almeno 14 caratteri (14) di cui due sono cifre frazionarie (.2).

La struttura generica di un formattatore é la seguente:

%[numero di argomento][opzioni][ampiezza][.precisione]tipo

Il tipo é l'unico elemento obbligatorio. In caso di mancata compatibilità con il parametro effettivamente passato viene generata una eccezione, come nell'esempio sopra riportato, dove si é specificato che ci si attendeva un decimale (un intero, quindi) ma in realtà é stato passato un floating point.
  • %d: decimale, é atteso un intero (byte, short, int, char o un wrapper a questi tipi)
  • %f: floating point, ovvero float, double o BigDecimal
  • %x: esadecimale, applicabile a byte, short, int, long e BigInteger.
  • %c: carattere, applicabile a byte, short, char, int.
Il metodo format() accetta un numero variabile di argomenti, secondo uno schema varargs mutuato dal linguaggio C, é dunque possibile specificare svariati parametri in una stringa di formattazione. Di default l'associazione é fatta in modo diretto: il primo % corrisponde al primo dei parametri specificati a seguire.

Nessun commento:

Posta un commento