为什么我会收到IllegalFormatConversionException在Java中的代码?(

2019-09-21 04:30发布

我目前正在从网络中获取数据,并打印出来在一个JTextArea代码。 在这两者之间,我想基于定线的小数点位置数。 这是实现小数点对齐之前工作的代码:

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)

你知道为什么我收到这个错误?

Answer 1:

您收到的错误,因为你BuildShort方法返回一个整数,你给它一个浮点格式模式。 只要坚持一个double在它面前投,应该是罚款:

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


Answer 2:

要格式化浮点,而不是一个整数。 插入代替%F A%d,它应该工作



Answer 3:

这些格式转换错误,该错误信息是由Oracle写得很不好,我不能为我的生命弄清楚自己为什么会以这样的方式写它。 就像上面已经指出,这意味着你试图格式化使用浮点格式令牌的整数。



文章来源: Why am I receiving IllegalFormatConversionException in Java for this code?