create table tb_pinfo 
(
pid number,
pname varchar2(200),
dprice number(19,2),
cprice number(19,2)
);insert into tb_pinfo values(1,'lenovo g470',99999999999999999,0);插入之后,查询发现插入后的数据,和插入时的数据明显不一致
大家都遇到这种鸟问题吗?如何解决

解决方案 »

  1.   

    create table tb_pinfo 
    (
    pid number,
    pname varchar2(200),
    dprice number(20,2),cprice number(19,2)
    );这样就没有问题了
      

  2.   

    select cast(99999999999999998+1 as number(19,2)) aa from dual
    其结果竟然是:100000000000000000.00
    很明显不对,老夫原以为只有java才会这样,没想到,数据库也是这样
      

  3.   

    这是Oracle number类型
    number类型的存储机制number(p,s)
    p:1~38
    s:-84~127p>0,对s分2种情况:1. s>0
    精确到小数点右边s位,并四舍五入。然后检验有效数位是否<=p;如果s>p,小数点右边至少有s-p个0填充。2. s<0
    精确到小数点左边s位,并四舍五入。然后检验有效数位是否<=p+|s|
      

  4.   

    你用的是不是pl/sql ?哈哈。这个是pl/sql 的bug。。它会自动帮你四舍五入的。如果你插入1111111111.12 到表中,然后再查这个字段出来,显示的却是1111111111 小数点后值没啦。。
    和你这个是同样的道理。。( 如果你想看到小数点后的值的话。你可以to_char() )你换个客户端就可以了。我换的是 cse 工具。。
      

  5.   

    select 9999999999999999999 from dual;select to_char(9999999999999999999) from dual;
      

  6.   

    set numformat 999999999999999999999
    select 9999999999999999999 from dual;