我用的是jdbc自己写的insert语句,用preparedstatment,传进去的就是7.56啊,用的是bigdecimal,不是double和float

解决方案 »

  1.   

    BigDecimal比double的精度应该更高,更容易产生类似问题
    你可以单步执行监测一下,你拼接出的sql语句中,应该就已经变成那一大长串了
      

  2.   

    存储数值时,数值类型采用 BigDecimal取数值时,调用 ResultSet.getBigDecimal()方法,能得到正确的数值测试通过
      

  3.   

    SQL> create table t(id number);表已创建。SQL> insert into t select 7.56 from dual;已创建 1 行。SQL> select * from t;        ID
    ----------
          7.56
    SQL> select * from t where id=7.56;        ID
    ----------
          7.56
      

  4.   


    -- ORACLE NUMBER 类型, 对不同的 9 有不同的显示方式 ,你研究一下。
    C:\>sqlplus "oracle/oracle"SQL*Plus: Release 11.2.0.1.0 Production on 星期一 9月 29 10:21:42 2014Copyright (c) 1982, 2010, Oracle.  All rights reserved.
    连接到:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> create table test(d number , id int )
      2  /表已创建。SQL> insert into test
      2  select 7.9 , 1 from dual union all
      3  select 7.99 , 2 from dual union all
      4  select 7.999 , 3 from dual union all
      5  select 7.9999 , 4 from dual union all
      6  select 7.99999 , 5 from dual union all
      7  select 7.999999 , 6 from dual union all
      8  select 7.9999999 , 7 from dual union all
      9  select 7.99999999 , 8 from dual union all
     10  select 7.999999999 , 9 from dual
     11  /已创建9行。SQL> insert into test
      2  select 7.1 , 1 from dual union all
      3  select 7.19 , 2 from dual union all
      4  select 7.199 , 3 from dual union all
      5  select 7.1999 , 4 from dual union all
      6  select 7.19999 , 5 from dual union all
      7  select 7.199999 , 6 from dual union all
      8  select 7.1999999 , 7 from dual union all
      9  select 7.19999999 , 8 from dual union all
     10  select 7.199999999 , 9 from dual
     11  /已创建9行。SQL> set pagesize 100
    SQL>
    SQL> select * from test
      2  /         D         ID
    ---------- ----------
           7.9          1
          7.99          2
         7.999          3
        7.9999          4
       7.99999          5
      7.999999          6
     7.9999999          7
    7.99999999          8
             8          9
           7.1          1
          7.19          2
         7.199          3
        7.1999          4
       7.19999          5
      7.199999          6
     7.1999999          7
    7.19999999          8
           7.2          9已选择18行。SQL>
      

  5.   

    我找不到原因,是公司框架底层的东西,从日志上看是插入的是7.56,而且底层我粗略见过,从来不使用double、float,都是bigdecimal,拿到result也是getBigDecimal(),唉不纠结了,直接将数据库类型改成取两位小数,改精确度要清空该列数据,还好正式环境还没上线,数据都可以删。