我收到System.out.printf()的错误

时间:2014-11-13 00:19:13

标签: java eclipse printf

我遇到了运行时错误,我无法弄清楚原因。虽然我已经发现它正在发生,因为下面的代码行。

System.out.printf("\n\nThe total bill for your group is $%.2f before taxes. The HST (13%) will be $%.2f.", totalBill, amountOfTax);

totalBill和amountOfTax都是浮点型变量。

我对编程很新,并且几乎没有使用printf的经验。我在程序的前面有一个非常相似的代码行,它基本上做同样的事情并运行良好。

我得到的错误如下:

Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = ')'
    at java.util.Formatter.checkText(Formatter.java:2579)
    at java.util.Formatter.parse(Formatter.java:2555)
    at java.util.Formatter.format(Formatter.java:2501)
    at java.io.PrintStream.format(PrintStream.java:970)
    at java.io.PrintStream.printf(PrintStream.java:871)
    at RestaurantOrder.main(RestaurantOrder.java:220)

感谢您的帮助,我很感激!

PS。我应该注意到我正在使用Eclipse Luna(4.4.0)

3 个答案:

答案 0 :(得分:7)

您需要在format string中转义%符号。 " 13%"成为" 13 %%":

System.out.printf("\n\nThe total bill for your group is $%.2f before taxes. " + 
    "The HST (13%%) will be $%.2f.", totalBill, amountOfTax);

答案 1 :(得分:2)

(13%)的百分号被解释为占位符。它正在%之后查找有关如何格式化变量的详细信息,而)无效。

您的意思是在输出中有一个文字%,而不是解释为占位符。它必须使用另一个%符号进行转义。尝试:

System.out.printf(
  "\n\nThe total bill for your group is $%.2f before taxes. The HST (13%%) will be $%.2f.",
  totalBill, amountOfTax);

有关详细信息,请参阅Formatter javadocs

  

与参数不对应的格式说明符具有以下语法:

%[flags][width]conversion

  

'%'%结果是文字'%'('\ u0025')

答案 2 :(得分:2)

你必须逃避文字'%'将格式字符串标记为" %%",例如"(13 %%)"

printf查找以'%'开头的格式说明符,因此在您的情况下,它会看到"%)"并感到困惑,想知道')'是为了。

您的错误消息提供了一个很好的提示:

Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = ')'

当你看到这样的错误时,它正在窒息,在你的字符串中寻找那个字符,你通常会在附近找到问题。

official tutorial对此并不是那么明显,但看official documentation就会显示细节。