项目使用SSH框架,前端输入如:“123456789”这个9位数
通过Debug,发现提交到对象注入的是 一个科学记数法的:“1.23456792E8”float 数
解决办法:
直接改为Double类型,
显示的时候,使用
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(18); // 设置最大小数位
df.format(fl.doubleValue());
就可以得到用10进制显示的数据。
不过发现一个Tomcat7.0.55的bug
在使用El表达式的时候,如果一个方法被重载了,
其参数数量都相同,但如果传入的为null,则不知道识别什么了,会报错。
tomcat bug 提交
解决办法,
public static Object toString(Object ob) {
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(18); // 设置最大小数位
if (ob == null) {
return ob;
} else {
if (ob.getClass().getName().contains("ouble")) {
Double db = (Double) ob;
if (db == 0) {
return 0;
} else {
return df.format(db.doubleValue());
}
} else if (ob.getClass().getName().contains("loat")) {
Float fl = (Float) ob;
if (fl == 0) {
return 0;
} else {
return df.format(fl.doubleValue());
}
}
return ob;
}
}
错误重现:
js页面:
${floatUtil.toString(data_djw.DJW_TLFQYL)}在data_djw.DJW_TLFQYL 为空的时候,报错。
public void toString(Float fl){
//方法一
}
public void toString(Double db){
//方法二
}
在这样的情况下,使用el表达式是会出错的,识别不了到底用哪个方法,tomcat8已经修复该bug。
错误提示为:
Unable to find unambiguous method in class