Oracle数据类型问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 04:34:59
number(p,s)
p:1---38
s:-84---127
有效数位:从左边第一个不为0的数算起,小数点和负号不计入有效位数。
我现在是Number(30,11)为什么我这个数12345678.123456789存成了12345678.12345680160,为什么不是12345678.123456789,按数据类型解释应该保存11位小数啊。。。。
数据是通过java程序插到表中的,
bgd = new BigDecimal(tmpC[5]);
rs.updateBigDecimal("FAEndBal",bgd);

tmpC是String[]
我在PLSQL里直接写insert和update语句也保存有误,跟上面说的一样

检查下数据来源吧,我试了一下,应该不会出现这种情况的哈。

tmpC[5] 是 double类型么?
应该是double 转为 BigDecimal时发生的精度丢失,与oracle没有关系。

------------------------------------
sorry,是我想当然了,我测试了一下,插入的数值实际值是没有问题的,但是如果在Pl/sql developer中查看结果确实会显示异常,不过在sqlplus中是没有问题的,你可以试试看。

SQL>create table t(
a number(30,11));

表已创建。
SQL> insert into t values(12345678.123456789);

已创建 1 行。
SQL> select * from t;
A
----------
12345678.1
已选择 1 行。
SQL> col a for 99999999.9999999999
SQL> select * from t;

A
--------------------
12345678.1234567890

首先应排除Oracle的问题
应该检查下你程序中bgd的数值,应该是存在精度的,或者在写入数据库前进行修约,java的数据类型与Oracle的数据类型是有区别的。