¿Que formato usar para 2 decimales o ninguno?

Estoy tratando de formatear un numero usando printf pero no puedo encontrar la máscara correcta.

Por ejemplo

class F {
    public static void main( String ... args ) {
        p(2.123123);
        p(2.0);
    }
    public static void p(double d ) {
        System.out.printf("%.2f",d);
        System.out.println();
    }
 
}

Imprime

2.12
2.00

Que formato usar para imprimir:

2.12
2

O de ser posible

2.12
   2

?

Background:

Quiero mostar tamaños de archivo así:

23/03/11 12:15 0.00    TEST/
30/03/11 10:35 2.57 kb picture-3651.jpg
12/04/11 14:49 7.31 mb reference.pdf

Que sobra decirlo, se ve horrible cuando el archivo es un directorio o mide menos de 1 kb

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

No hay forma

No hay una forma ni con DecimalFormat ni con String.format().

Si usas new DecimalFormat("#.##") te imprime por ejemplo 2.53 o 2, pero para 2.50000 te imprime 2.5, es la bronca. Si necesitas 2.50 entonces creo que lo mejor será que uses un BigDecimal: new BigDecimal(n).setScale(2, RoundingMode.DOWN) (o el modo que tú quieras) y a eso le das toPlainString(). Pero entonces para n=2.0 te imprime 2.00.

Lo más fácil es que hagas un String.format("%3.2f", valor).replace(".00",""), ni modo...

Creo que new

Creo que new DecimalFormat("0.00") también funcionaría, pero ya no lo intenté, de hecho #.## es lo que busco, aunque no quería encadenarlo a otro formatter ( el de printf )

En fin, lo usé para esto:

http://www.javamexico.org/blogs/oscarryz/tiny_ls_para_windows_con_java

:)

DecimalFormat

Claro es DecimalFormat para poder usar dos decimales o mas, tambien puede que ninguno:
declaras la variable global o como la utilices:

java.text.DecimalFormat formatoSalida = new java.text.DecimalFormat("0");//para ningun decimal
java.text.DecimalFormat formatoSalidaDecimal = new java.text.DecimalFormat("0.00");//para dos decimales

lo mismo para 3, 4 o 5 decimales
java.text.DecimalFormat formatoSalidaDecimal = new java.text.DecimalFormat("0.00000");//para cinco decimales

pudes observar que ("0.00000") puedes modificarlo para los decimales que deseas que tenga.

>.<

Gracias Lvctu si, de hech

Gracias Lvctu si, de hech estaba buscand hacer eso directamente desde el printf, pero al final lo hice como mencionas.