我遇到了运行时错误,我无法弄清楚原因。虽然我已经发现它正在发生,因为下面的代码行。
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)
答案 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就会显示细节。