Ширина двойной переменной

Я пытаюсь записать текст в файл с помощью PrintWriter, и я не понимаю, что означает «7» в следующем примере:

double d = 12.11211;
out.format(“%7.3f”, d);

Источник, из которого я вдохновляю, говорит, что 7 означает:

The 7.3 before the f denotes the width (7) and precision (3) to output d in.

Проблема в том, что я не могу понять, что на самом деле означает эта ширина. Я имею в виду, что даже если моя переменная будет иметь более 7 цифр, она не будет ничего форматировать.

width - общее количество символов в форматированном выводе

Peter Lawrey 23.11.2018 20:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
1
1 182
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Согласно это:

The field width in a formatting operator is a nonnegative integer that specifies the number of digits or characters in the output when formatting input values. For example, in the operator %7.3f, the field width is 7.

By default, the output text is padded with space characters when the field width is greater than the number of characters.

7 добавляет заполнение () в случае, если вывод меньше 7 символов. Таким образом, на выходе всегда будет не менее 7 символов с 3 десятичными знаками с плавающей запятой.

В этой документации дается очень подробное объяснение форматирования текста в целом, большая часть которого применима для разных языков.

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

посмотрите этот пример:

System.out.printf("String is '%5s'\n", "A");
// String is '    A'
System.out.printf("String is '%.5s'\n", "Happy Birthday!");
// String is 'Happy'

для получения дополнительной информации посмотрите этот ссылка на сайт

По ширине это означает, что строка всегда будет заполнять остальные места, если количество цифр / символов значения меньше заданного числа.

double d = 12.11211;
String.format(“%7.3f”, d);


> 12.112
 ^^^^^^^
 1234567

Вашим источником вдохновения должен быть javadoc. Он говорит:

The width is the minimum number of characters to be written to the output. If the length of the converted value is less than the width then the output will be padded by ' ' ('\u0020') until the total number of characters equals the width. The padding is on the left by default.[...]

For the floating-point conversions 'a', 'A', 'e', 'E', and 'f' the precision is the number of digits after the radix point.

Это показывает простой эксперимент:

    System.out.printf("%7.3f%n", 1.3);
    System.out.printf("%7.3f%n", 12.3);
    System.out.printf("%7.3f%n", 12.34);
    System.out.printf("%7.3f%n", 12.345);
    System.out.printf("%7.3f%n", 12.3456);
    System.out.printf("%7.3f%n", 12.34567);
    System.out.printf("%7.3f%n", 12.34567);
    System.out.printf("%7.3f%n", 123.34567);
    System.out.printf("%7.3f%n", 1234.34567);
    System.out.printf("%7.3f%n", 12345.34567);

печатает:

  1,300
 12,300
 12,340
 12,345
 12,346
 12,346
 12,346
123,346
1234,346
12345,346
Ответ принят как подходящий

Думайте об этом как об общей длине строки, созданной применяемым форматом.
Если вы примете во внимание, что после десятичной точки будет ровно 3 символа и 1 символ для самой десятичной точки, тогда останется 3 символа для целой части.
Поскольку в вашем номере всего 2 цифры в целой части, окончательный результат будет дополнен слева пробелом:

double d = 12.11211;
out.format("%7.3f", d);

будет создавать:

" 12.112"

с участием

out.format("%8.3f", d);

ты получаешь

"  12.112"

и так далее.

Минимальная длина форматированной строки в вашем случае:

6 = 2 chars for the integer part + 1 char for the decimal point + 3 chars for the digits after the decimal point

так что даже если вы установите:

out.format("%5.3f", d);

это не приведет к усечению результата, это будет:

"12.112"

Другие вопросы по теме