2012-08-13 58 views
3

我目前正在研究從網絡獲取數據並將其打印在JTextArea上的代碼。在這之間,我試圖根據小數位數來對齊數字。這是實現小數點對齊之前工作的代碼:爲什麼我在此代碼中接收Java中的IllegalFormatConversionException?

private static final String NewLine = System.getProperty("line.separator"); 
String NetString = ""; 
byte[] data = p.getData(); 
NewString += "SID:  " + BuildShort(data,4) + NewLine; 
NewString += "DID:  " + BuildShort(data,6) + NewLine; 

這是新的

NewString += String.format("%-8s%11.5f" + NewLine, "SID : ", BuildShort(data,4)); 
NewString += String.format("%-8s%11.5f" + NewLine, "DID : ", BuildShort(data,6)); 

這是我收到的錯誤消息

Exception in thread "Thread-2" java.util.IllegalFormatConversionException: f != java.lang.Integer 
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.util.Formatter.format(Unknown Source) 
at java.lang.String.format(Unknown Source) 
at MT302.ParsePacket(MT302.java:97) 
at MK20_DataView.run(MK20_DataView.java:261) 
at java.lang.Thread.run(Unknown Source) 

你知道爲什麼我我收到這個錯誤?

+0

您將不得不告訴我們,「BuildShort(data,4)」的返回類型是什麼。 (以及爲什麼你要在Java中使用大寫字母來啓動方法/變量名稱,這不是C#^^) – brimborium 2012-08-13 14:38:55

回答

5

您正在收到錯誤消息,因爲您的BuildShort方法返回一個整數,並且您正在給它一個浮點格式模式。只要堅持一個double投在它面前,它應該是罰款:

NewString += String.format("%-8s%11.5f" + NewLine, "SID : ", (double)BuildShort(data,4)); 
+0

謝謝,我不知道輸入值只能接受雙倍數值只有 – user1590710 2012-08-13 15:02:43

+0

它並不需要雙倍,你只是告訴它期待一個。 – Charles 2012-08-13 15:23:22

+0

但爲什麼整數不會自動提升爲double? – 2013-02-07 15:50:59

0

要格式化浮點,而不是一個整數。插入一個%d而不是%f,它應該可以工作

0

這些格式轉換錯誤的錯誤信息寫得很差,我不能爲我的生活弄清楚爲什麼他們會寫它在這樣的方式。就像上面已經指出的那樣,這意味着你正在嘗試使用浮點格式令牌格式化整數。

相關問題