# Introduction The `format()` method allows one to send formatted output to an output stream. At a minimum, the `format()` method accepts a format string. It may also accept a list of additional parameters that will be inserted into the format string. Here is a simple example: ``` public static void main(String[] ignored) { String pluralNoun = "cows"; String noun = "cabbage"; String color = "red"; int quantity = 5; double percentage = 33.84; System.out.format("The %d %s painted%n%f %% of the %s %s.", quantity, pluralNoun, percentage, noun, color); } ``` which produces: ``` The 5 cows painted 33.840000 % of the cabbage red. ``` A brief glance at the example likely has you thinking that there is something special about the **`%`** symbol, when used in a `format` string. That's a good thought. The **`%`** symbol is the first character in a **format specifier**. In its simplest form, the format specifier consists of the percent symbol and a **conversion type character**. The example above makes use of the following conversion type characters: * **`%d`** — A signed decimal integer * **`%s`** — A string * **`%f`** — A real (floating point) number * **`%n`** — A line feed (move to the next line) * **`%%`** — A literal '**%**' When the `format()` statement is executed, the value(s) of the argument(s) passed to `format()` are inserted into the formatted string. These are the simpliest forms of format specifiers. There are additional components that can be added to make produce a more specific form of output. # Specifying Minimum Width We can specify a minimum width for each format specifier like this: ``` public static void main(String[] ignored) { System.out.println("12345678901234567890"); System.out.format("[%4d]%n", 13); System.out.format("[%4d]%n", 13000); System.out.format("[%8s]%n", "fun"); System.out.format("[%4f]%n", Math.PI); System.out.format("[%18f]%n", Math.PI); } ``` which produces: ``` 12345678901234567890 [ 13] [13000] [ fun] [3.141593] [ 3.141593] ``` The width specifier sets the minimum width to be used by the data inserted into the output stream. * The **13** is shifted two spaces to the right in order to expand the width to four characters. * The **13000** is already wider than four characters, so no modification is made. * Five spaces are added to **fun** so that it takes up 8 characters. * `Math.PI` defaults to taking up 8 characters, so no characters are added when a width of 4 is specified, but additional characters are added when a width of 18 is specified. # Specifying Precision By default, `format()` displays floating point numbers (`%f`) with six digits after the decimal place. This can be changed by including a precision specifier: ``` System.out.format("%6.2f%n", 5.5555); System.out.format("%.14f%n", Math.PI); ``` produces: ``` 5.56 3.14159265358979 ``` * Although it is called the precision modifier, it just controls the number of digits to the right of the decimal place. * The number displayed is rounded appropriately (notice how, **5.5555** got rounded to **5.56**). # Specifying Precision The format of the output can be further specified using one of the following flags: * **-** — left-justify result * **+** — include **+** sign for positive values * **0** — zero-pad result * **(** — enclose negative values in parentheses Examples: ``` System.out.format("[%-6.2f]%n", 5.55555); System.out.format("[%+6.2f]%n", 5.55555); System.out.format("[%06.2f]%n", 5.55555); System.out.format("[%(6.2f]%n", 5.55555); System.out.format("[%(6.2f]%n", -5.55555); ``` ``` [5.56 ] [ +5.56] [005.56] [ 5.56] [(5.56)] ``` # Summary The format specifier is generally shown as follows: ``` %[argument_index$][flags][width][.precision]conversion ``` The items shown between square brackets are optional. As a result, our format specifiers can be as simple as **%d** or as complicated as **%2$+13.7f**. (Note: I'm using the optional `argument_index$` specifier even though we didn't go over it here.) This page touches on just a few of the possibilities available with `format()`. You can find out a lot more about formatting output [here](http://javadoc.taylorial.com/java.base/util/Formatter.html).