java - ¿Qué significa un número entero que tiene cero delante y cómo puedo imprimirlo?
int output (3)
El JLS 3.10.1 describe 4 formas de definir enteros.
Un literal entero se puede expresar en decimal (base 10), hexadecimal (base 16), octal (base 8) o binario (base 2).
Un número octal consiste en un dígito 0 seguido de uno o más de los dígitos del 0 al 7 ...
Un número decimal es el dígito único 0, que representa el número entero cero, o consiste en un dígito del 1 al 9 opcionalmente seguido de uno o más dígitos del 0 al 9 ...
En resumen, si su literal entero (es decir,
011
) comienza con un 0, entonces Java asumirá que es una
notación octal
.
Soluciones:
Si desea que su entero contenga el valor 11, entonces no sea elegante, simplemente asigne 11. Después de todo, la notación no cambia nada al valor. Quiero decir, desde un punto de vista matemático 11 = 011 = 11,0.
int a = 11;
El formato solo importa cuando lo imprime (o cuando convierte su
int
en una
String
).
String with3digits = String.format("%03d", a);
System.out.println(with3digits);
El formateador
"%03d"
se utiliza para agregar ceros a la izquierda.
Alternativamente, puede hacerlo en 1 línea, utilizando el método
printf
.
System.out.printf("%03d", a);
class test{
public static void main(String args[]){
int a = 011;
System.out.println(a);
}
}
¿Por qué obtengo
9
como salida en lugar de
011
?
¿Cómo puedo obtener
011
como salida?
El
011
se interpreta como un número octal.
Esto significa que está en la base 8. Vea también
esta publicación SO
.
De la respuesta aceptada por Stuart Cook:
En Java y varios otros lenguajes, un entero literal que comienza con 0 se interpreta como una cantidad octal (base 8).
Dígitos en la Base 10:
100s, 10s, 1s
Dígitos en la Base 8:
64s, 8s, 1s
Entonces el
011
se interpreta como 8 + 1 = 9
Un literal numérico que comienza con 0 se analiza como un número octal (es decir, la raíz 8). 011 es 9 en octal.