java接收number数据类型(Double与BigDecimal)

昨天自己开发了一个bug ~~~~~~~  记录一下长点记性

oracle数据库定义了一个字段数据类型为:number(15,2)

一看想着反正是数字类型的,就用Double接收吧,

Double d =(Double) rs.getObject("XXX")

结果就报错了:BigDecimal不能强制转换成Double

修改代码很容易           BigDecimal bgd = (BigDecimal)rs.getObject("XXX");
                                        Double d = bgd.doubleValue();

但是要搞清楚BigDecimal和Double的区别

写了一段代码测试了一下

java接收number数据类型(Double与BigDecimal)_第1张图片

很奇怪!!!

再修改一下:

java接收number数据类型(Double与BigDecimal)_第2张图片

又不奇怪了,查询其他同学的说法,BigDecimal与Double的主要区别在精度和四舍五入上,还有同学说Java中的简单浮点数类型float和double不能够进行运算,看上述结果,double数据类型的四则运算确实是有问题的,同学们以后在处理需要进行运算的数据时还是使用BigDecimal和BigInteger数据类型要安全一些。

 

还有还有,若Dao层方法返回一个整型数据,返回值类型一定要写Integer,而不是int。因为如果数据库查询结果为null,null在转换为int时就会出错,而这个错误我们不好捕获,所以用Integer数据类型接收就会比较安全,接收后在service层再进行非空判断,就很好控制了。

 

你可能感兴趣的:(java基础,bug集锦)