numeros - ¿Agregar ceros iniciales al número en Java?
numero con ceros a la izquierda java (5)
Desde Java 1.5 puedes usar el método String.format
. Por ejemplo, para hacer lo mismo que tu ejemplo:
String format = String.format("%%0%dd", digits);
String result = String.format(format, num);
return result;
En este caso, está creando la cadena de formato utilizando el ancho especificado en dígitos y luego aplicándolo directamente al número. El formato para este ejemplo se convierte de la siguiente manera:
%% --> %
0 --> 0
%d --> <value of digits>
d --> d
Entonces, si los dígitos son iguales a 5, la cadena de formato se convierte en %05d
que especifica un número entero con un ancho de 5 imprimiendo ceros a la izquierda. Consulte la documentación de Java para String.format
para obtener más información sobre los especificadores de conversión.
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo puedo rellenar un entero con ceros a la izquierda? 14 respuestas
¿Hay una mejor manera de obtener este resultado? Esta función falla si num tiene más dígitos que dígitos, y creo que debería estar en la biblioteca en algún lugar (como Integer.toString (x, "% 3d") o algo así)
static String intToString(int num, int digits) {
StringBuffer s = new StringBuffer(digits);
int zeroes = digits - (int) (Math.log(num) / Math.log(10)) - 1;
for (int i = 0; i < zeroes; i++) {
s.append(0);
}
return s.append(num).toString();
}
En el caso de su versión jdk inferior a 1.5, se puede usar la siguiente opción.
int iTest = 2;
StringBuffer sTest = new StringBuffer("000000"); //if the string size is 6
sTest.append(String.valueOf(iTest));
System.out.println(sTest.substring(sTest.length()-6, sTest.length()));
Otra opción es usar DecimalFormat para dar formato a su cadena numérica. Aquí hay otra forma de hacer el trabajo sin tener que usar String.format si está atrapado en el mundo pre 1.5:
static String intToString(int num, int digits) {
assert digits > 0 : "Invalid number of digits";
// create variable length array of zeros
char[] zeros = new char[digits];
Arrays.fill(zeros, ''0'');
// format number as String
DecimalFormat df = new DecimalFormat(String.valueOf(zeros));
return df.format(num);
}
Que tal solo
public static String intToString(int num, int digits) {
String output = Integer.toString(num);
while (output.length() < digits) output = "0" + output;
return output;
}
String.format ( http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax )
En tu caso será:
String formatted = String.format("%03d", num);
- 0 - para rellenar con ceros
- 3 - para ajustar el ancho a 3