java int output zero println

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.