Табличный формат / printf Spacing в Java Assistance

Так что этот фрагмент кода беспокоил меня в течение последнего часа или около того. По сути, часть задачи моей программы - отображать данные в своего рода табличном формате. Осталось только сделать так, чтобы результат выглядел красиво, если можно так выразиться.

Вот (пример) сегмент кода, который меня беспокоил с точки зрения форматирования / синтаксиса команды printf:

System.out.printf("%-20s %-20s %-20s %-20s %-20s%n",
                "Part #:", "Description:", "Number Sold:", "Price:", "Total:");
System.out.println
        ("---------------------------------------------------------------------------------------------------------------");
System.out.printf("%-20s %-20s %-20d %s%-20.2f %s%-20.2f%n",
                "2304E", "Power Drill", 20, "$",99.99, "$",100*99.99);

Дело в том, что, как только я пытаюсь запустить команду в NetBeans, я получаю следующее:

Хотя это не совсем нарушает программу или не имеет большого значения, этот маленький маленький отступ справа от цифры Total: заголовок мне не нравится


В течение последнего часа я пытался получить идеально выровненное двойное / плавающее значение "$9999,00" под заголовком "Total:". Любая помощь будет оценена.

tl; dr - посмотрите на Image Link, затем посмотрите на код. Пытаясь получить номер справа внизу, "Итого" толкнул влево. Помогите?

1 ответ

Решение

Дополнительный $ помещен в %s добавляет еще один символ в ваш столбец, что делает его шире, чем ожидалось, на 20 символов. Из-за этого символы в следующих столбцах смещены вправо. Если ты хочешь price а также total столбцы всегда должны содержать 20 символов, которые вы можете

  • уменьшить каждый %-20.2f в %-19.2f (при условии, %s будет содержать только один символ),
  • генерировать "$99,99" строка сначала как String.format("$%.2f",99.99) и использовать его в качестве аргумента для %-20s (который заменит %s%-20.2f).

Таким образом, ваш код может выглядеть

System.out.printf("%-20s %-20s %-20d %s%-19.2f %s%-19.2f%n",
        "2304E", "Power Drill", 20, "$",99.99, "$",100*99.99);

или же

System.out.printf("%-20s %-20s %-20d %-20s %-20s%n",
        "2304E", "Power Drill", 20, String.format("$%.2f",99.99), String.format("$%.2f",100*99.99));
Другие вопросы по тегам