Java中printf的双%格式化问题

%sprintf一个字符串,%d是我认为的小数…但是在放入时

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

..抛出exception告诉我%d != lang.double。 想法?

%d代表整数使用%f ,它适用于floatdouble类型:

 double d = 1.2; float f = 1.2f; System.out.printf("%f %f",d,f); // prints 1.200000 1.200000 

是的, %d表示十进制,但它表示十进制数系统 ,而不是小数点。

此外,作为前一篇文章的补充,您还可以控制要显示的小数点数。 尝试这个,

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

有关更多信息,请参阅API文档 。

是的,%d代表十进制(整数),双倍期望%f。 但是简单地使用%f将默认为精度6.要打印double的所有精度数字,您可以通过字符串传递它:

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

要么

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

这是println默认执行的操作:

 System.out.println(d) 

(并终止该行)