发现个怪问题问了google没答案!发现用jdbctemplet 的queryForList 如果 db中是decimal类型的话,数据又很大的话,queryForList 就会把数据转换成科学记数法的.不知道怎么能1\使用queryForList不要转换成科学计数法或者2\在不知道科学计数法规则的前提下,获得科学计数法数据后在转换成正常数据 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主,我怀疑你说的科学记数法,只是输出形式而已。因为如果数据库中是个decimal,你对应的DAO字段肯定也是long,double什么的(甚至BigDecimal),内部肯定还是正确的数值,在System.out.println()的时候,系统显示成了科学技术的格式。可以试试NumberFormat转换,跟格式化日期一个道理:public static void main(String[] args) throws Exception{ NumberFormat nf=NumberFormat.getInstance(); nf.setMaximumFractionDigits(6); nf.setMaximumIntegerDigits(30); nf.setParseIntegerOnly(false); nf.setGroupingUsed(false); double num=111111111111111D/3.1D;//换成你从数据库查的数 System.out.println(num); System.out.println(nf.format(num)); } 我是Mysql的数据库啊,DB中字段的类型是decimal啊.我system queryForList 的时候list里面如果数据过大就有这样的格式"4.0331776E7",数据小就每问题.我用您提供的方法以后,后台报错,说含有一个以上的小数点.提示如下java.lang.NumberFormatException: multiple points sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1084) java.lang.Double.parseDouble(Double.java:510) 我是Mysql的数据库啊,DB中字段的类型是decimal啊.我System.out.println(JdbcTemplate.queryForMap("sql")) 的时候如果值过大,超过8位,就会变成这样的格式"4.0331776E7",数据小就没问题.我用您提供的方法以后,后台报错,说含有一个以上的小数点.提示如下 java.lang.NumberFormatException: multiple points sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1084) java.lang.Double.parseDouble(Double.java:510) 而且JdbcTemplate.queryForMap("sql"))返回的map里数据库里是int类型的数据竟然还带.0不知道为什么 对于decimal类型这种浮任意精度数值SQL标准要求缺省的比例是 0。也就是转化成整数精度。我们觉得这样做有点没用。如果你关心移植性,那你最好总是明确声明精度和比例。如果一个要存储的数值的比例比字段声明的比例高, 那么系统将尝试圆整该数值到指定的小数位。然后,如果小数点左边的数据位数超过了声明的精度减去声明的比例, 那么抛出一个错误。 数值数据值物理上是不带任何前导或者后缀零的形式存储的。 因此,字段上声明的精度和比例都是最大值,而不是固定分配的。建议你修改数据库的表的类型,为其制定最大精度和比例就可以了 queryList返回的列表里面int类型不带0吗? 一般超过精度要求才出现科学计数形式。其次是输出显示,例如EXCEL本身有时候就将大数据显示为科学计数法,将其变成文本即可。以前的项目是将精确数据整成字符类型,而非数据类型。字符串才能无限延伸。new java.math.BigDecimal(string value).toPlainString() 相邻字符串重复问题 如何设置ThreadStackSize大小 ?顶者给分,急。 高手可否调一下聊天室的程序 关于设置 关于java.util.zip的问题,主要是ZipEntry中getSize()返回值为-1。(附测试源码) 线程的问题 哪里有关于讲解jbulider的中文书籍? 请教个问题。在线等待 。。。。。 JBuilder输入的时候为什么光标总是有问题,往前跑 为何此程序老是抛出THREAD违例?? 用java批量导入大量数据 javascript中怎么调用java代码
内部肯定还是正确的数值,在System.out.println()的时候,系统显示成了科学技术的格式。可以试试NumberFormat转换,跟格式化日期一个道理:public static void main(String[] args) throws Exception{
NumberFormat nf=NumberFormat.getInstance();
nf.setMaximumFractionDigits(6);
nf.setMaximumIntegerDigits(30);
nf.setParseIntegerOnly(false);
nf.setGroupingUsed(false);
double num=111111111111111D/3.1D;//换成你从数据库查的数
System.out.println(num);
System.out.println(nf.format(num));
}
我是Mysql的数据库啊,DB中字段的类型是decimal啊.我system queryForList 的时候list里面如果数据过大就有这样的格式"4.0331776E7",数据小就每问题.我用您提供的方法以后,后台报错,说含有一个以上的小数点.提示如下
java.lang.NumberFormatException: multiple points
sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1084)
java.lang.Double.parseDouble(Double.java:510)
java.lang.NumberFormatException: multiple points
sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1084)
java.lang.Double.parseDouble(Double.java:510)
SQL标准要求缺省的比例是 0。也就是转化成整数精度。
我们觉得这样做有点没用。如果你关心移植性,那你最好总是明确声明精度和比例。
如果一个要存储的数值的比例比字段声明的比例高, 那么系统将尝试圆整该数值到指定的小数位。
然后,如果小数点左边的数据位数超过了声明的精度减去声明的比例, 那么抛出一个错误。
数值数据值物理上是不带任何前导或者后缀零的形式存储的。
因此,字段上声明的精度和比例都是最大值,而不是固定分配的。建议你修改数据库的表的类型,为其制定最大精度和比例就可以了
new java.math.BigDecimal(string value).toPlainString()