Почему мы не можем использовать целочисленную точность в printf в java?Просто любопытно - PullRequest
1 голос
/ 23 мая 2019
System.out.printf("%.2d",123);

кажется логичным получить выходные данные 12 или 23, но почему вместо этого они решили сделать это ошибкой?

1 Ответ

3 голосов
/ 23 мая 2019

... кажется логичным получить выходные данные 12 или 23 ...

Нет. Сожалею. Ошибка. Неверное мышление.

Метод printf ведет себя в соответствии с тем, что говорит его спецификация, а не с тем, что вам «кажется логичным» 1 .

Javadoc говорит это:

"Спецификаторы формата для общего, символьного и числового типов имеют следующий синтаксис:

 %[argument_index$][flags][width][.precision]conversion

Необязательная точность - неотрицательное десятичное целое число, обычно используемое для ограничения количества символов. Конкретное поведение зависит от конверсии.

Байт, Короткое, Целое и Длинное

[Для всех преобразований ...]

Точность не применима . Если указана точность, будет выброшено IllegalFormatPrecisionException. "

Дальнейшее чтение javadocs для Formatter показывает, что форматы %d не поддерживают "усечение" цифр целого числа.

... почему они решили сделать это ошибкой?

Потому что явная ошибка времени выполнения, сообщающая, что в вашем коде есть ошибка, лучше, чем приложение, выдающее неожиданные результаты, которые могут ускользнуть от вашего тестирования и других процессов контроля качества.


1 - По моему мнению, то, что вы предлагаете, нелогично, а не логично. Так чья «логика» должна победить? Ни! Вы должны читать спецификацию, а не предполагать, что все работает так, как вы думаете, должно работать. Обратите внимание, что этот принцип применяется ко всем действиям по программированию. Если сомневаетесь, прочитайте спецификацию!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...