2012-09-11 15 views
17

En C, la instrucción printf() permite que las longitudes de precisión se suministren en la lista de parámetros.java equivalente a printf ("% *. * F")

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

donde los asteriscos se reemplazan por los valores primero y segundo, respectivamente.

Estoy buscando un equivalente en Android/Java; String.format() arroja una excepción.

EDITAR: Gracias, @Tenner; de hecho funciona

Respuesta

14

utilizo

int places = 7; 
int decimals = 3; 

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

Un poco feo (y la concatenación de cadenas hace que no funciona bien), pero funciona.

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

Esto imprime el floatValue con 1 decimal de precisión

+0

Puede usar System.out.format (...) directamente aquí – RNJ

+0

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

0

Es como esto ...

%AFWPdatatype 

A - número de argumentos

F - Banderas

W - Ancho

P - Precisión

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

1

Se puede formatear el formato:

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

Esta es la salida:

%7.3f 
111,111 

Usted podría también utilizar un poco de ayuda de esta manera:

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 siguiente llamada sería equivalente al código anterior y devuelve 111,111.

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

No es tan bonita como printf, y el formato de entrada puede llegar a ser desordenado, pero se puede hacer mucho más con él.

Cuestiones relacionadas