Java中使用%.3f格式说明符为何出现报错?
问题原因分析
你的代码抛出MissingFormatArgumentException的核心原因是错误地将格式字符串与要格式化的参数进行了字符串拼接,而非正确传递参数给printf方法。
在第二行printf调用中:
System.out.printf("Pi is: %.3f \n" + (float)Math.PI);
这段代码会先把格式字符串"Pi is: %.3f \n"和(float)Math.PI的字符串形式(比如3.1415926)拼接成一个新字符串,最终传递给printf的只有这一个拼接后的字符串。此时printf解析这个字符串时,发现里面包含格式说明符%.3f,但没有提供对应的参数来填充这个占位符,因此抛出异常。
修复方案
正确的做法是将格式字符串作为printf的第一个参数,把需要格式化的数值作为第二个参数单独传递,不要拼接:
public class PrettyPrinting { public static void main(String[] args) { float a = 453.1274f; System.out.printf("Formatted number is %.2f \n", a); // 正确写法:格式字符串 + 单独传递PI参数 System.out.printf("Pi is: %.3f \n", Math.PI); // 如果需要转成float类型,也可以保留强制转换 // System.out.printf("Pi is: %.3f \n", (float)Math.PI); } }
运行这段代码后,就能正常输出圆周率保留3位小数的结果:
Formatted number is 453.13 Pi is: 3.142
你之前尝试改用double格式说明符、去掉类型转换仍未解决问题,是因为没有修正字符串拼接这个核心错误——只要还是把参数和格式字符串拼在一起,printf就无法识别格式说明符对应的参数,依然会抛出异常。
内容的提问来源于stack exchange,提问作者Saswata Mishra
相关产品推荐
相关产品推荐

