2012-09-11 20 views
17

In C, l'istruzione printf() consente di specificare le lunghezze di precisione nell'elenco dei parametri.java equivalente a printf ("% *. * F")

printf("%*.*f", 7, 3, floatValue); 

dove gli asterischi vengono sostituiti rispettivamente con il primo e il secondo valore.

Sto cercando un equivalente in Android/Java; String.format() genera un'eccezione.

MODIFICA: Grazie, @Tenner; funziona davvero.

risposta

14

Io uso

int places = 7; 
int decimals = 3; 

String.format("%" + places + "." + decimals + "f", floatValue); 

un po 'brutto (e concatenazione di stringhe rende non esegue bene), ma funziona.

3
System.out.print(String.format("%.1f",floatValue)); 

Questa stampa il floatValue con 1 decimale di precisione

+0

È possibile utilizzare System.out.format (...) direttamente qui – RNJ

+0

@BelusC Ci sono entrambi. Vedi http://docs.oracle.com/javase/1.5.0/docs/api/java/io/PrintStream.html#format%28java.lang.String,%20java.lang.Object...%29 – RNJ

0

E 'come questo ...

%AFWPdatatype 

A - Numero di argomenti

F - Bandiere

W - Larghezza

P - Precision

String.format("%.1f",float_Val);

1

Si potrebbe formattare il formato:

String f = String.format("%%%d.%df", 7, 3); 
System.out.println(f); 
System.out.format(f, 111.1111); 

Questo stamperà:

%7.3f 
111,111 

Si potrebbe anche usare un po 'di aiuto in questo modo:

public static String deepFormatter(String format, Object[]... args) { 
    String result = format; 
    for (int i = 0; i != args.length; ++i) { 
     result = String.format(result, args[i]); 
    } 

    return result; 
} 

La seguente chiamata sarebbe quindi equivalente al codice sopra riportato e restituirà 111,111.

deepFormatter("%%%d.%df", new Object[] {7, 3}, new Object[] {111.1111}); 

non è così bella come printf, e il formato di ingresso può diventare ingombra, ma si può fare molto di più con esso.