32

%s is a string in printf, and %d is a decimal I thought...yet when putting in

writer.printf("%d dollars is the balance of %s\r\n", bal, nm);

..an exception is thrown telling me that %d != lang.double. Ideas?

Rafael
  • 7,605
  • 13
  • 31
  • 46
D. Spigle
  • 541
  • 2
  • 5
  • 15

4 Answers4

73

%d is for integers use %f instead, it works for both float and double types:

double d = 1.2;
float f = 1.2f;
System.out.printf("%f %f",d,f); // prints 1.200000 1.200000
codaddict
  • 445,704
  • 82
  • 492
  • 529
31

Yes, %d means decimal, but it means decimal number system, not decimal point.

Further, as a complement to the former post, you can also control the number of decimal points to show. Try this,

System.out.printf("%.2f %.1f",d,f); // prints 1.20 1.2

For more please refer to the API docs.

Adeel Ansari
  • 39,541
  • 12
  • 93
  • 133
9

Following is the list of conversion characters that you may use in the printf:

%d – for signed decimal integer

%f – for the floating point

%o – octal number

%c – for a character

%s – a string

%i – use for integer base 10

%u – for unsigned decimal number

%x – hexadecimal number

%% – for writing % (percentage)

%n – for new line = \n
Tiago Martins Peres
  • 14,289
  • 18
  • 86
  • 145
Salazar
  • 91
  • 1
  • 3
3

Yes, %d is for decimal (integer), double expect %f. But simply using %f will default to up to precision 6. To print all of the precision digits for a double, you can pass it via string as:

System.out.printf("%s \r\n",String.valueOf(d));

or

System.out.printf("%s \r\n",Double.toString(d));

This is what println do by default:

System.out.println(d) 

(and terminates the line)

Andy
  • 2,469
  • 1
  • 25
  • 25