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.
Nessun commento:
Posta un commento