2011-12-25 37 views
29

En el siguiente programaFormateo usando printf y el formato

class ZiggyTest2 { 

    public static void main(String[] args){  

     double x = 123.456; 
     char c = 65; 
     int i = 65; 

     System.out.printf("%s",x); 
     System.out.printf("%b",x); 
     System.out.printf("%c",c); 
     System.out.printf("%5.0f",x); 
     System.out.printf("%d",i); 
    }  
} 

La salida es

123.456trueA 12365 

Por favor alguien puede explicar cómo un doble valor (es decir 123.456) se convierte en un valor lógico (es decir. true)

La razón por la que pregunto es porque sé que java no permite el uso de números para valores booleanos. Por ejemplo, no se permite lo siguiente en Java

if (5) { 
//do something 
} 

Gracias

+0

creo que es bueno señalar que existe una diferencia importante entre el uso de booleanos en 'if' declaraciones frente en' printf'. Es decir, una instrucción 'if' requiere un' boolean' primitivo (o un objeto 'Boolean', que será unboxed). Por lo tanto, no se permite ningún valor no booleano. Sin embargo, 'printf' requiere que sus argumentos sean de tipo' Object', es decir, de cualquier tipo. Por lo tanto, el compilador no pone ninguna restricción sobre los argumentos a 'printf': incluso si son tipos primitivos como' boolean', pueden estar enmarcados (a 'Boolean'). Esta es la razón por la que puede pasar tipos inesperados a 'printf' pero no a' if'. –

Respuesta

96

para "% b": Si el arg argumento es nulo, entonces el resultado es "falso". Si arg es un valor booleano o booleano, el resultado es la cadena devuelta por String.valueOf(). De lo contrario, el resultado es "verdadero".

reference

+4

Sí, así que si eres desarrollador C, ten cuidado, porque String.format ("% b", 0) y String.format ("% b", 1) devolverán "verdadero" –

0

Debido a que el valor es de tipo double y es así como el convertidor %b trabaja con valores de este tipo.

10

El API documentation parece indicar claramente por qué.

Si el argumento arg es nulo, el resultado es "falso". Si arg es un valor booleano o booleano, el resultado es la cadena devuelta por String.valueOf(). De lo contrario, el resultado es "verdadero".