Java SCJP-数字格式

Java SCJP-数字格式,java,certificate,number-formatting,scjp,Java,Certificate,Number Formatting,Scjp,鉴于: 插入第4行的哪个代码片段生成输出| 12.345 | printf语句的解释是什么,为什么|%7d |会给出非法格式转换异常? 感谢您,因为d是双精度的,不能格式化为十进制整数。对于浮点变量,如果没有显式转换,您不能使用“d”格式描述符来表示您知道可能会丢失精度。因为%d格式化了整数 从文档: A. System.out.printf("|%7d| \n", d); B. System.out.printf("|%7f| \n", d); C. System.out.printf("|%

鉴于:

插入第4行的哪个代码片段生成输出
| 12.345 |

printf语句的解释是什么,为什么|%7d |会给出
非法格式转换异常?


感谢您,因为d是双精度的,不能格式化为十进制整数。对于浮点变量,如果没有显式转换,您不能使用“d”格式描述符来表示您知道可能会丢失精度。

因为%d格式化了整数

从文档:

A. System.out.printf("|%7d| \n", d);
B. System.out.printf("|%7f| \n", d);
C. System.out.printf("|%3.7d| \n", d);
D. System.out.printf("|%3.7f| \n", d);
E. System.out.printf("|%7.3d| \n", d);
F. System.out.printf("|%7.3f| \n", d);
Answer: F
类的
format()
方法采用以下格式的格式字符串:

'd'     integral    The result is formatted as a decimal integer 
System.out.printnf()
是一种使用相同参数的方便方法

因此
%7d
表示
[width]
为7,而
[conversion]
d
表示整型。在本例中,传递的值是一个不能格式化为整数类型的双精度值。

“…不能格式化为十进制。”不能格式化为十进制整数。它可以格式化为十进制。“Decimal”的意思是“以10为基数”,而不是整数和浮点。
'd'     integral    The result is formatted as a decimal integer 
%[argument_index$][flags][width][.precision]conversion