zeros with strings rellenar number left leading izquierda example con completar ceros java numbers

with - string format completar con ceros java



Entero con ceros a la izquierda (8)

Cuando escribo System.out.println(0123); Obtengo 83 sin embargo System.out.println((int)0123F); impresiones 123 .

¿Por qué funciona de esa manera?


Octal (número de base 8)

0123 significa octal 123, que es 1 * 8 * 8 + 2 * 8 + 3, que equivale a 83. Por alguna razón, los flotantes octales no están disponibles.

Crear 0123 significa el número entero 83. Crear 0123F significa el 123 flotante. Cuando se convierte de nuevo a entero, sigue siendo 123.

Simplemente no use el 0 inicial si no quiere decir octal. Después de todo, no son exactamente útiles (y los programadores que sí conocen los números octales se confundirán cuando vean el 09F).


El octal (0 de entrada) y el hexadecimal (0x de salida) se heredaron de C. Para comparar, pruebe

System.out.println(0x123);


En Java, los literales enteros con un cero inicial son enteros octales (base 8).

1 * 8^2 + 2 * 8 + 8 = 83

Por lo tanto, no use ningún número que conduzca con 0, si no desea tratarlo como número octal.

Cualquier número con el sufijo ''F'' es entonces tratado como número flotante.

En el ejemplo dado (inf)0123F se imprimirá 123 porque 0123F se trata como float (123) y se convierte a int. El valor permanece 123.


Porque los literales enteros que comienzan con 0 se tratan como números octales.

Ver la sección 3.10.1 del JLS


Prueba esto:

public static String leftPad(int n, int padding) { return String.format("%0" + padding + "d", n); } leftPad(5, 3); // return "005" leftPad(15, 5); // return "00015" leftPad(224, 3); // return "224" leftPad(0, 4); // return "0000"


el primero impreso como 83 porque Java toma 0123 como número octal e imprime el equivalente decimal de ese número.


printf lo hará: http://java.sun.com/developer/technicalArticles/Programming/sprintf/

public class X { public static void main(final String[] argv) { System.out.printf("%04d", 123); System.out.println(); } }

También podría hacer que sea "%0" + size + "%d" si quisiera variar la duración ... aunque si las longitudes fueran comunes probablemente haría constantes como "%04d" , "%012d" , etc. ...


0123 -> 83 1010L -> 1010 0101L -> 65

Los números 1010L y 0101L no están en representación binaria (solo para evitar la confusión).
Estos números están en representación decimal.

Incluso según los patrones de Regex en documentos de Oracle ,

/ 0n es el personaje con valor octal 0n (0 <= n <= 7)
/ xhh es el personaje con valor hexadecimal 0xhh

Por lo tanto, su número 0101 ya sea en formato Integer o Long se trata como una representación octal de un número.

123 => 1 * 8^2 + 2 * 8^1 + 1 * 8^0 = 83 0101 => 1 * 8^2 + 0 * 8^1 + 1 * 8^0 = 64 + 0 + 1 = 65