Табличный формат / 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));