2012-08-13 70 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

这些格式转换错误的错误信息写得很差,我不能为我的生活弄清楚为什么他们会写它在这样的方式。就像上面已经指出的那样,这意味着你正在尝试使用浮点格式令牌格式化整数。

相关问题