今天写了一段测试代码,如下:
package socStatistics;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Formatter;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import org.apache.ibatis.io.Resources;
import socStatistics.entity.StatisticsResultData;
public class StatisticsMain {
public static void main(String[] args) {
// 最终
Properties prop;
try {
prop = Resources.getResourceAsProperties("param.properties");
String beginTime = (String) prop.get("beginTime");
String endTime = (String) prop.get("endTime");
List resultList = Utils
.listStatisticResultDatas(beginTime, endTime);
List rawlist = Utils.listStatisticResultDatas("0000",
"2459");
System.out.print("原始数据量=" + rawlist.size() + ", 符合" + beginTime + "-"
+ endTime + "之间的数据量=" + resultList.size());
Formatter f = new Formatter(System.out);
f.format(",比例= %.2f" + (double) resultList.size() / rawlist.size() * 100);
System.out.println("%");
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果测试时报错如下:
原始数据量=1935, 符合0830-1730之间的数据量=1852,比例= Exception in thread "main" java.util.MissingFormatArgumentException: Format specifier '%.2f'
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at socStatistics.StatisticsMain.main(StatisticsMain.java:31)
按照提示,31行发生错误,原来是
f.format(",比例= %.2f" + (double) resultList.size() / rawlist.size() * 100);这里的+,应该是逗号。即改成f.format(",比例= %.2f" ,(double) resultList.size() / rawlist.size() * 100);
另外,如果想在输出百分数时直接在后面加上%,如f.format(",比例= %.2f %" ,(double) resultList.size() / rawlist.size() * 100);会报错:
原始数据量=1935, 符合0830-1730之间的数据量=1852Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '%'
at java.util.Formatter.checkText(Unknown Source)
at java.util.Formatter.parse(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at socStatistics.StatisticsMain.main(StatisticsMain.java:31)
可以另起一行,System.out.println("%");