SCJP - числовой формат - PullRequest
       9

SCJP - числовой формат

0 голосов
/ 02 мая 2011

Дано:

public class LineUp {
    public static void main(String[] args) {
        double d = 12.345;
        // insert code here
    }
}

Какой фрагмент кода, вставленный в строку 4, производит вывод | 12.345|?

A. System.out.printf("|%7d| \n", d);
B. System.out.printf("|%7f| \n", d);
C. System.out.printf("|%3.7d| \n", d);
D. System.out.printf("|%3.7f| \n", d);
E. System.out.printf("|%7.3d| \n", d);
F. System.out.printf("|%7.3f| \n", d);
Answer: F

Какова интерпретациязаявления printf, почему |% 7d |дает illegalFormatConversionException ?

Спасибо

Ответы [ 3 ]

5 голосов
/ 02 мая 2011

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

3 голосов
/ 02 мая 2011

Поскольку% d форматирует целое число.

Из документа:

'd'     integral    The result is formatted as a decimal integer 
2 голосов
/ 02 мая 2011

Метод Formatter класса format() класса принимает строку формата в виде:

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

System.out.printnf() - это удобный метод, использующий те же аргументы.

Итак, %7d обозначает [width] из 7 и [conversion] из d, что для целочисленных типов.В этом примере передается значение double, которое нельзя отформатировать как целочисленный тип.

...