Java中printf的双%格式化问题

时间:2010-10-04 06:03:03

标签: java printf

%sprintf中的字符串,%d是我认为的小数...但是在放入

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

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

4 个答案:

答案 0 :(得分:57)

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

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

答案 1 :(得分:23)

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

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

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

有关详情,请参阅API docs

答案 2 :(得分:3)

以下是您可以在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

答案 3 :(得分:1)

是,%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) 

(并终止该行)