java Float超8位后显示不正确

本文介绍了解决Tomcat中科学计数法显示问题的方法,并提供了一个Tomcat EL表达式在方法重载时遇到的bug及解决方案。通过调整数据类型和使用DecimalFormat可以正确显示数值,同时通过特定的toString方法绕过EL表达式的识别问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目使用SSH框架,前端输入如:“123456789”这个9位数

 
$}%$K}33)PS%VA2NSYG%RNN

38}`)2C`HNVQ~R3JUKAG1WX

9[55TT8QB4NKCQH]@`YC%TY

 

通过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 提交

https://issues.apache.org/bugzilla/show_bug.cgi?id=56425

 

解决办法,

 

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页面:

<jsp:useBean id="floatUtil" class="com.gaos.bi.amend.action.FloatUtil" />

<td>${floatUtil.toString(data_djw.DJW_TLFQYL)}</td>

 

在data_djw.DJW_TLFQYL 为空的时候,报错。

 

public void toString(Float fl){

//方法一

}

 

public void toString(Double db){

//方法二

}

 

在这样的情况下,使用el表达式是会出错的,识别不了到底用哪个方法,tomcat8已经修复该bug。

错误提示为:

Unable to find unambiguous method in class

转载于:https://my.oschina.net/bquan/blog/367902

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值