NUMBER的长度和精度的理解

[复制链接]
查看11 | 回复4 | 2013-6-14 13:16:17 | 显示全部楼层 |阅读模式
NUMBER的长度和精度含义不太理解。
NUMBER类型不设置长度,默认是精度38位,存储小到10e-130大到(但不包括)10e126的任何数值。
精度38位不是指长度是38位?
我试过NUMBER(38)定义字段后,只能存储38位长度的数字。
如果是NUMBER不指定字段长度,那么可以输入超过38位的数字。
如何理解精度这个含义呢?他不同和数字长度一个概念?谢谢。

回复

使用道具 举报

千问 | 2013-6-14 13:16:17 | 显示全部楼层
杨廷昆版主之前写过一篇文章,找找看看吧
回复

使用道具 举报

千问 | 2013-6-14 13:16:17 | 显示全部楼层
精度是指可以存储的有效数据的位数,长度是指其在底层存储时,会占用多少字节数。
以下链接供参考:
http://www.blogjava.net/caojianhua/archive/2011/01/24/343461.html
回复

使用道具 举报

千问 | 2013-6-14 13:16:17 | 显示全部楼层
bfc99 发表于 2015-8-12 16:03
精度是指可以存储的有效数据的位数,长度是指其在底层存储时,会占用多少字节数。
以下链接供参考:
http ...

NUMBER(38)指的是38个数字长度。
NUMBER默认是38位精度,38个9后边带88个0的数字。
回复

使用道具 举报

千问 | 2013-6-14 13:16:17 | 显示全部楼层
bisal 发表于 2015-8-13 10:15
NUMBER(38)指的是38个数字长度。
NUMBER默认是38位精度,38个9后边带88个0的数字。

SQL> create table test2 (c1 number);
Table created.
SQL> insert into test2 values(999999999999999999999999999999999999999950000000000000000000000000000000000000000000000000000000000000000000000000000000000000);
insert into test2 values(999999999999999999999999999999999999999950000000000000000000000000000000000000000000000000000000000000000000000000000000000000)

*
ERROR at line 1:
ORA-01426: numeric overflow --40个9,接着1个5,接着85个0,报溢出错误
SQL> insert into test2 values(999999999999999999999999999999999999999949999999999999999999999999999999999999999999999999999999999999999999999999999999999999);
1 row created. --40个9,接着1个4,接着85个9,成功。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行