当前位置:首页 > 开发 > 数据库 > 正文

oracle的number类型精度、刻度范围 [转]

发表于: 2013-02-26   作者:billdwl   来源:转载   浏览次数:
摘要: 一、 oracle 的 number 类型精度、刻度范围 number(p,s)p: 1---38s: -84---127有效数位 :从左边第一个不为 0 的数算起,到末位数字为止的所有数字,小数点和负号不计入有效位数。 p>0 ,对 s 分 3 种情况: 1.s>0 精确到小数点右边 s 位,并四舍五入 。然后检验有效数位是否 <= p ; ZWF.YUDONG>crea

一、 oracle number 类型精度、刻度范围

number(p,s)

p: 1---38
s: -84---127

有效数位 :从左边第一个不为 0 的数算起,到末位数字为止的所有数字,小数点和负号不计入有效位数。

p>0
,对 s 3 种情况:
1.s>0

精确到小数点右边 s 位,并四舍五入 。然后检验有效数位是否 <= p

ZWF.YUDONG>create table t_n(id number(5,2));
Table created.
  --
小数点前面最多只能有 3 位,小数点后面位数可以任意多

ZWF.YUDONG>insert into t_n values(123.45);
1 row created.

ZWF.YUDONG>insert into t_n values(123.455);
1 row created.


ZWF.YUDONG>insert into t_n values(12.345);
1 row created.

ZWF.YUDONG>insert into t_n values(1.234);
1 row created.

ZWF.YUDONG>insert into t_n values(.001);
1 row created.

ZWF.YUDONG>select * from t_n;
       ID
----------
  123.45
  123.46

12.35

1.23

0.00

5 rows selected.

ZWF.YUDONG>insert into t_n values(1234.5678);   --
有效位为 4 + 2 > 5
insert into t_n values(1234.5678)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


ZWF.YUDONG>insert into t_n values(12345);   --
有效位为 5 + 2 > 5
insert into t_n values(12345)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column



如果 s > p ,小数点右边至少有 s - p 0 填充

ZWF.YUDONG>create table t_n(id number(4,5));
Table created.

ZWF.YUDONG>insert into t_n values(1);
insert into t_n values(1)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


ZWF.YUDONG>insert into t_n values(.1);   -- 0.10000
,有效位为 5 > 4
insert into t_n values(.1)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


ZWF.YUDONG>insert into t_n values(1.01 );   -- 1.01000
,有效位为 6 > 4
insert into t_n values(1.01)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


ZWF.YUDONG>insert into t_n values(.01);
1 row created.

ZWF.YUDONG>insert into t_n values(.001);
1 row created.
ZWF.YUDONG>insert into t_n values(.0001);
1 row created.

ZWF.YUDONG>insert into t_n values(.00001);
1 row created.

ZWF.YUDONG>insert into t_n values(.00000 6);
1 row created.

ZWF.YUDONG>insert into t_n values(.000000 1);   --
超过刻度存储 0
1 row created.

ZWF.YUDONG>select * from t_n;
       ID
-------------
   0.01000
   0.00100

   0.00010
  0.00001
   0.00001
    0.00000

6 rows selected.



2. s<0

精确到小数点左边 s 位,并四舍五入 。然后检验有效数位是否 <= p + |s|

ZWF.YUDONG>create table t_n(id number(5,-2));
Table created.

ZWF.YUDONG>insert into t_n values(123);
1 row created.

ZWF.YUDONG>insert into t_n values(1234);
1 row created.

ZWF.YUDONG>insert into t_n values(12345);
1 row created.

ZWF.YUDONG>insert into t_n values(123456);
1 row created.

ZWF.YUDONG>insert into t_n values(1234567);
1 row created.

ZWF.YUDONG>insert into t_n values(12 );
1 row created.

ZWF.YUDONG>insert into t_n values(1 );
1 row created.

ZWF.YUDONG>insert into t_n values(.1 );
1 row created.

ZWF.YUDONG>insert into t_n values(1234567.6789 );
1 row created.

ZWF.YUDONG>select * from t_n;
       ID
------------
     100 
     1200
      12300
  123500
  1234600
        0
        0
       0
  1234600

9 rows selected.

ZWF.YUDONG>insert into t_n values(12345678);
insert into t_n values(12345678)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column

3. s=0   
表示整数

number(p) 相当于 number(p,0) ,用于指定整数

number
:不指定 p s number ,用于表示浮点数,其 precision scale 都是 oracle 所能支持的最大值

总结:

p < s 这种情况下

1. 只能用来存放大于 0 小于 1 小数
2.
小数点后紧接着的 0 的数目至少有 s-p ,不然无法正常插入。
3. p
用来指定小数点之后的最大有效数字位数。当然不包括小数点后紧接着的 0 的个数。
4. s
是用来限制小数点后的数字位数【当然也就包括小数点后紧接的 0 】。

p > s 这种情况下

小数点前最多能插入: p - s 个数字,但是小数点后的数字可以任意长度

oracle的number类型精度、刻度范围 [转]

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
首先了解一下ORACLE 10G中NUMBER类型。 NUMBER (precision,scale) precision表示数字中的有效位
原文: C#中float的取值范围和精度 float类型的表现形式: 默认情况下,赋值运算符右侧的实数被视为 d
首先带上原文的链接:http://www.itpub.net/thread-1873736-1-1.html。 有数据如下: with tmp_t as
  最近在写unix网络程序的时候,需要完成一个很简单的程序,将输入的十六进制数转成字符串形式的I
1.select d.id,d.outer_code from dict_depts_source d order by outer_code(查看重复数据) 2.selec
1.select d.id,d.outer_code from dict_depts_source d order by outer_code(查看重复数据) 2.selec
GPS定位转百度坐标,精度很高哇! <!DOCTYPE html> <html> <head> <meta http
row_number() over ([partition by col1] order by col2) ) as 别名 表示根据col1分组,在分组内部根
在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都有各自的作用,下面我们就主要来
java中的类型概念名的说法不一、让我很是迷茫,我个人的理解整理,如有错误还请高人指点,! 一、Jav
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号