2014-10-07 68 views
1

我有這樣的代碼,我想,如下所示格式化輸出,但是當我啓動程序,達到對printf,它停止並給出錯誤Exception in thread "main" java.util.IllegalFormatConversionException: f != java.lang.String用printf

variables:  
itemcode=integer 
selecteditems=string 
perkg=double 
userkg=string 
quantity-integer 
dry=string 
total=double 

格式化輸出的java注意:這些是for循環的可變變量。

System.out.printf("%-4d %-13s %8.2f %8.2f %-8d %-10s %8.2f %n", itemcode, 
    selecteditems, per_kg, userkg, quantity, dry, total); 
+0

這將有助於瞭解這些變量的值和類型的 – 2014-10-07 17:07:54

+0

可能重複(http://stackoverflow.com/questions/11936327/why-am-i-receiving-illegalformatconversionexception-in-java-for-this-code) – 2014-10-07 17:10:13

+0

爲什麼'%n'作爲最後的格式說明符? – Rustam 2014-10-07 17:11:24

回答

2

您已經定義userkg字符串,但你要打印它作爲一個小數。您需要將變量的類型更改爲double

當你定義一個格式字符串時,你告訴java你希望顯示你的變量的方式,以及類型它應該期望的。

例如,%8.2f要求你給浮動作爲參數。

相反,如果你在String類型的變量傳遞,你會得到一個錯誤:

例如

float aFloat = 0; 
String notAFloat = ""; 
System.out.printf("%8.2f %8.2f", aFloat, notAFloat); 

...提供了以下錯誤:[?爲什麼我在Java中接收IllegalFormatConversionException此代碼]

Exception in thread "main" 
    java.util.IllegalFormatConversionException: f != java.lang.String 
at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4045) 
at java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:2761) 
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2708) 
at java.util.Formatter.format(Formatter.java:2488) 
at java.io.PrintStream.format(PrintStream.java:970) 
at java.io.PrintStream.printf(PrintStream.java:871) 
at Scratch.main(Scratch.java:9)