jdbcTemplate查询数据库⾦额字段的精度问题:ResultSet中
取值
//数据表中Money字段是Number类型 number(8,2)
List query = JdbcTemplate().query(sql,new Object[]{ aac001 } ,
new RowMapper(){
public Object mapRow(final ResultSet rs, final int i) throws SQLException {
//测试⾦额 System.out.println("rs.getDouble: "+rs.getDouble("money"));
System.out.println("rs.getObject: "+rs.getObject("money"));
System.out.println("rs.getString: "+rs.getString("money"));
System.out.println("rs.getFloat: "+rs.getFloat("money"));
System.out.println("rs.getBigDecimal: "+rs.getBigDecimal("money"));
//以下是数据表中Money的值,⽤Java查出并打印后的值
情况⼀:0.36
情况⼆:0.00
情况三:20.03
情况四:999999.03
//============以下修改为number(16,6)
情况⼀:999999.030000
情况⼆:999999.030050
情况三:9999999.000000
情况四:9999999999.030050 整数位10位(可以看到getDouble显⽰为科学计数法)
情况五:999999999.030001 整数位9位
情况六:99999999.030001 整数位8位
情况七:9999999.030001 整数位7位
情况⼋:9999999.999999 整数位7位
从上⾯的测试过程可以看出,
1.当数字的整数位为0时,rs.geString()⽅法会丢失整数位的0.
2.当整数位>=7位数字时,rs.getDouble()⽅法获得的数字将是科学计数法(与期望的不⼀样)
3. rs.getFloat()⽅法会丢失⼩数位第2位
综合以上,在涉及到使⽤JdbcTemplate()⽅法查询数据表中number类型的代表⾦额的字段时,推荐使⽤getBigDecimal()或getObject()⽅法。-----end.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论