oracle的number型別精度 刻度範圍

2021-06-20 09:35:44 字數 4659 閱讀 9247

一、 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

123460000

01234600

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型別

number型別的語法很簡單 number p,s p 精度位 有效數字位 precision,是總有效資料位數,取值範圍是38,預設是38,可以用字元 表示38。s 小數字,scale,是小數點右邊的位數,取值範圍是 84 127,預設值取決於p,如果沒有指定p,那麼s是最大範圍,如果指定了p,那...

ORACLE儲存之NUMBER型別

這篇是關於oralce對number型別儲存方式的探析,以及試圖對設計者的初始意圖進行解釋.最近網上看了很多對 oracle 怎樣進行資料儲存描述的 感覺都不好理解 於是參照了很多文章 自己琢磨了下幾種簡單資料型別的儲存 number型別 oracle 對number 的儲存,是按一定規則進行轉換以...

oracle 中 number型別實驗

create table shentest testcol number 7 testcol2 number 7,1 testcol3 number 7,2 testcol4 number 7,1 testcol5 number 7,2 select from shentest insert int...