System.out.printf报错咨询:IllegalFormatConversionException问题排查
解决Java printf格式化错误的问题
我一眼就看出问题出在哪了——你遇到的IllegalFormatConversionException是因为格式占位符和传入的参数类型不匹配,还有一处printf的写法也错了,咱们一步步来修正:
问题1:表头的格式占位符与参数类型不匹配
你这段代码里的第一行printf:
System.out.printf("\n%-10s%4d%10.2f\n", "Person#", "Age", "TotalBill");
这里的%4d是整数类型的格式占位符,但你传入的对应参数是字符串"Age",类型完全不匹配,这就是抛出d != java.lang.String异常的直接原因。
修正方案:
把%4d改成字符串占位符%4s,因为表头文字都是字符串:
System.out.printf("\n%-10s%4s%10.2f\n", "Person#", "Age", "TotalBill");
问题2:printf的参数传递方式错误
你这段代码里的第二行printf:
System.out.printf("Grand total = $ %.2f\n" + grandTotal);
这种写法完全搞错了printf的用法——printf的第一个参数是格式字符串,后续参数才是要填充到占位符里的值,你直接用+把变量拼在格式字符串后面,相当于把grandTotal的值当成了格式字符串的一部分,而不是填充%.2f的参数。
修正方案:
把grandTotal作为printf的第二个参数传递:
System.out.printf("Grand total = $ %.2f\n", grandTotal);
改完这两处之后,格式占位符和参数类型就完全对应了,控制台的格式化错误会消失,计算结果也能正常显示啦。
内容的提问来源于stack exchange,提问作者Ivan Gonzalez
相关产品推荐
相关产品推荐

