Форматеры в Java
%b, %c, %d, %f, %s Как это работает в Java? Я пытался прочитать класс Formatter и форматируемый интерфейс, однако я не могу понять, что касается преобразований, передаваемых в качестве аргументов.
Например:
System.out.printf("%f not equals %b", Math.PI, Math.E)
Несмотря на то, что форматирование, такое как%b, %c, %d, %f, %s, ограничено в экзамене ocjp6, это похоже на огромную тему для подготовки
2 ответа
Я думаю, у вас возникли проблемы с пониманием того, как работает System.out.printf(). Это очень просто, как только вы получите идею.
Ваш оригинальный вопрос касался ниже
System.out.printf("%f not equals %b", Math.PI, Math.E)
Здесь System.out.printf пытается вывести строку. %f и%b можно понимать как заполнители с особым значением.
Заполнители, потому что они будут заменены данными, которые идут после запятой. В этом случае% f заменяется значением Math.PI, а%b заменяется значением Math.E
Особое значение, потому что каждый форматтер обозначает что-то, например, как упомянуто выше
%b is for Boolean
%f is for Decimal floating-point
%c is for Character
%d is for Decimal integer
%s is for String
Теперь написать ваш оригинальный запрос в простой форме
System.out.printf("%f is not equals to %b", 3.14, true);
Здесь%f (имеется в виду десятичное число с плавающей запятой) заменяется значением с плавающей запятой 3.14, а%b заменяется значением "true".
если вы переключите% F и% B в приведенном выше, как
System.out.printf("%b is not equal to %f", 3.14, true); //error
because "true" (boolean)value is not compatible with %f
Но это будет работать
System.out.printf("%b is not equal to %f", 3.14, 3.14);
// будет работать, потому что 3.14 будет иметь значение true. Выше работает из-за некоторого автоматического преобразования типов с помощью Java. Но вы можете рассмотреть это позже.
Теперь по поводу вашего последнего вопроса, что происходит в
System.out.println("%+04.2f",12.6542); ?
Я предполагаю, что вы имели в виду printf.
Теперь все форматеры и их пояснения присутствуют в ссылке
http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html
Это может выглядеть пугающе. но это довольно просто.
Lets figure out what %+04.2f stands for from the above link
'+' Requires the output to include a positive sign for all positive numbers.
If this flag is not given only negative values will include sign.
'0' Requires the output to be padded with leading zeros to the minimum field width following any sign. Called zero padding
4.2 indicates that a floating point number is displayed in a total of 4 character spaces, including 2 digits after the decimal.
that means 22.5555 will be shown as 22.55(total 4 char and two after space)
Read Width and precision in the link given above.
f floating point The result is formatted as a decimal number
Итак, в основном то, что означает%+04.2f, показывает положительный знак для всех положительных чисел. Число должно содержать всего 4 символа и два после десятичной. Он должен быть отформатирован как число с плавающей точкой.
Больше примеров
System.out.printf(" %04.2f",12.6542); output ==> 12.65
System.out.printf(" %+04.2f",12.6542); output ==> +12.65(plus sign here bcoz we gave +)
System.out.printf(" %+04.2f",-12.6542); output ==> -12.65
System.out.printf(" %02d",1); output ==> 1
System.out.printf(" %02d",1); output ==> 01 (bcoz of 02d)
System.out.printf(" %03d",1); output ==> 001 (bcoz of 03d)
System.out.printf(" %+04.2f",22.2); output ==> +22.20
System.out.printf(" %+04.2f",2222.125); output ==> +2222.13
(left side of decimal is never truncated . so all chars shows ie total 6 chars even though only 4 asked
System.out.printf(" %+04.0f",2222.125); output ==> +2222 (bcoz zero chars requested after decimal point)
Пожалуйста, перейдите по ссылкам ниже. Это поможет вам легче понять концепцию
http://www.homeandlearn.co.uk/java/java_formatted_strings.html
https://answers.yahoo.com/question/index?qid=20101017181211AAbtWC0
https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
http://alvinalexander.com/programming/printf-format-cheat-sheet
%b is for Boolean
%f is for Decimal floating-point
%c is for Character
%d is for Decimal integer
%s is for String
Вы можете проверить эту ссылку. Также Oracle документы объясняет это в деталях.