SQL的Numeric和JAVA的BigDecimal转换问题
SQL的Numeric和JAVA的BigDecimal转换问题:
数据库中的字段类型为Numeric(8,6)
JAVA中的部分实现代码为:
BigDecimal bg = new BigDecimal("23.45");
String str = bg.setScale(6,BigDecimal.ROUND_HALF_UP).toString();//设置成小数点后6位
......
pstmt.setBigDecimal(1, new BigDecimal(str));//这里到数据库后就只有小数点后2位了
System.out.println(new BigDecimal(str));//这里打印出来为:23.450000
原因:setBigDecimal会把JAVA中BigDecimal转成SQL中的Numeric后就只有2位精度了
由于是牵涉到金钱的问题,所以用float不精确,如果用setFloat,存到数据库后为:23.449899类似的数据,而且一般JAVA中对钱的处理都用BigDecimal
那么现在在不改变数据的存储类型的情况下,如何实现 JAVA中用BigDecimal,精确到6位小数,且存入数据库后也精确到小数点后6位??
大侠们指点指点,多谢!!