Есть ли лучший способ получить этот результат? Эта функция завершается с ошибкой, если в num цифр больше, чем digits, и я чувствую, что это должно быть где-то в библиотеке (например, Integer.toString(x,"% 3d") или что-то в этом роде)
static String intToString(int num, int digits) { StringBuffers=newStringBuffer(digits); intzeroes= digits - (int) (Math.log(num) / Math.log(10)) - 1; for (inti=0; i < zeroes; i++) { s.append(0); } return s.append(num).toString(); }
В этом случае вы создаете строку формата, используя ширину, указанную в цифрах, а затем применяете ее непосредственно к числу. Формат для этого примера преобразуется следующим образом:
%% --> % 0 --> 0 %d --> <value of digits> d --> d
Итак, если digits равно 5, строка формата становится %05d которая определяет целое число шириной 5, печатающее начальные нули. Смотрите в java docs для String.format получения дополнительной информации о спецификаторах преобразования.
Ответ 3
Другой вариант - использовать DecimalFormat для форматирования числовой строки. Вот еще один способ выполнить работу без использования String.format, если вы застряли в мире до версии 1.5:
static String intToString(int num, int digits) { assert digits > 0 : "Invalid number of digits";
// create variable length array of zeros char[] zeros = newchar[digits]; Arrays.fill(zeros, '0'); // format number as String DecimalFormatdf=newDecimalFormat(String.valueOf(zeros));