是否可以在同一个printf语句中使用print Strings和format double? IllegalFormatConversionException

时间:2016-03-03 18:36:58

标签: java printf

我想打印带有格式化双精度的句子,而不必使用多个打印语句。这些是我试图运行的一些陈述:

  System.out.printf("( %.2f", real + ", %.2f", imaginary + ")"); 

  System.out.printf("(" + "%.2f",real + ", " + "%.2f",imaginary + ")");

然而,这是我得到的错误

java.util.IllegalFormatConversionException: f != java.lang.String
    at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
    at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source)
    at java.util.Formatter$FormatSpecifier.print(Unknown Source)
    at java.util.Formatter.format(Unknown Source)
    at java.io.PrintStream.format(Unknown Source)
    at java.io.PrintStream.printf(Unknown Source)
    at ComplexNumber.print(ComplexNumber.java:17)
    at ComplexClient.main(ComplexClient.java:10)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

我只是错误地使用了printf语句吗?或者是我试图做不到的事情?感谢

1 个答案:

答案 0 :(得分:0)

您不要在格式字符串构造中混合变量。您应该将格式字符串创建为第一个参数,之后传入所有变量。传入的变量数必须与格式字符串中的占位符数相匹配,并且它们必须与占位符指定的格式匹配。

尝试:

//                <- format    ->
System.out.printf("( %.2f, %.2f)", real, imaginary);
//                                 ... variables afterwards here

这与printf method signature匹配,Book on Google首先采用格式String,后跟任意数量的Object变量参数。