Java中printf的双百分号格式化问题

32

%s 是在 printf 中表示字符串,而 %d 则表示十进制数。然而,在放入值时...

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

当我尝试比较 %dlang.double 时,抛出了一个异常。有什么想法吗?

4个回答

73

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


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

5
顺便说一下,它只会在小数点后打印6个数字,请按此格式进行调整:%.8f (它将打印8个数字)。 - Eric
1
那么使用%f可以将精度提高到15位? - TheRealChx101

31

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

此外,作为对前一篇帖子的补充,您还可以控制要显示的小数位数。试试这个方法:

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

更多信息请参考API文档


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

是的,%d用于十进制(整数),%f用于浮点数。但是简单地使用%f会默认保留6位精度。要打印双精度浮点数的所有精度数字,您可以将其作为字符串传递:

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

或者

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

println的默认行为如下:

System.out.println(d) 

(并且终止该行)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接