java中数值类型转换的问题,double类型显示科学计数法了。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中数值类型转换的问题,double类型显示科学计数法了。相关的知识,希望对你有一定的参考价值。

一个字段是double类型的,oracle数据库中是 number(18,2),页面限制输入8位。
现在输入:12345678
数据库中存的是:12345678.00
再回显到页面时就变成了:1.2345678E7
在程序中debug看到对象中存的也是:1.2345678E7
在不修改字段类型的情况下,怎么解决?
注:jdk1.6 ,oracle 10g 页面是jsp

在显示时候调用的是Double类的toString()方法。原因如下:

而Double的toString()方法实际是调用了FloatingDecimal类的toJavaFormatString()方法,如下图

研究源码发现:科学计数法展示是因为FloatingDecimal类的decExponent属性

那么decExponent属性究竟是什么呢?简单来说,

就是小数点向左移动decExponent就是正数,向右移动就是负数。移动几位就是几。

而具体移动规则是移动到小数点左边为0,右边为非0时候停止。

参考技术A 数据库里面用Varchar2来保存,java中用String。可以解决问题。追问

我问的是,在不修改字段类型的情况下,怎么解决?

追答

用java.util.BigDecimal类。这是java里专门处理高精度数据的类。

java的double的大数值时 怎么才能不显示成

double类型直接打印或者输出的时候,如果数值过大就会转换成科学计数法,所以要自己定义方法,将double类型的值格式化输出,转换成你想要的格式的字符串就可以了 参考技术A 输出时,使用System.out.format()在命令行窗口中能有更好的格式控制。类似于C语言中的printf一样,比如,System.out.format("这是格式化输出:%1$6.2f", 6.22e23);
如果用在GUI界面里,可以使用String.format用一样的方法构造出所需要的串,再显示在组件上。不仅对double的输出有效,任何数据都可以带有格式地组合输出。

以上是关于java中数值类型转换的问题,double类型显示科学计数法了。的主要内容,如果未能解决你的问题,请参考以下文章

Java Double类型的科学计数转普通数值的问题

java中double类型转换为String类型?

类型转换指令

java中如何把一个String类型的变量转换成double型的?

JAVA中Double,如何才能不显示成科学计数法

java