程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle數據庫中NUMBER(x,y)數據類型詳解

Oracle數據庫中NUMBER(x,y)數據類型詳解

編輯:Oracle教程

Oracle數據庫中NUMBER(x,y)數據類型詳解


試驗准備 分析並實驗 1 小數部分的處理 2 可保存的最大值 3可以保存的最小值 總結

Oracle的NUMBER數據類型表示十進制的數字,分別從整數位個數和小數位個數進行限制。我們以NUMBER(8,2)為例進行分析。

1 試驗准備

建立一個只有一列的表,NUMBER(8,2)表示數字總個數最多為8,小數部分最多2位(推算出整數部分最多8-2=6位)。

create table t1 (c1 number(8,2));

2 分析並實驗

2.1 小數部分的處理

小數部分代表著精確程度,NUMBER(8,2)可以保存的小數位最多2位,那麼超過2位會怎樣呢?

SQL> insert into t1 values(1.234);

1 row created.

SQL> select * from t1;

        C1
----------
      1.23

SQL> delete from t1;

1 rows deleted.

SQL> insert into t1 values(1.235);

1 row created.

SQL> select * from t1;

        C1
----------
      1.24

可見,小數部分對小數點後2位以後的部分采用了四捨五入的算法,1.234存為1.23,而1.235存為1.24。

2.2 可保存的最大值

既然整數部分最多6位,小數部分最多2位,那麼number(8,2)可以表示的最大數字就是999999.99。我們現在插入這個最大的值。

SQL> insert into t1 values(999999.99);

1 row created.

SQL> select * from t1;

        C1
----------
 999999.99

可見這個數字被正確的存儲了。
下面插入一個更大大數字999999.991

SQL> insert into t1 values(999999.991);

1 row created.

SQL> select * from t1;

        C1
----------
 999999.99

可以插入,但是被截斷為999999.99,其實原因很簡單,小數部分的0.991會四捨五入到0.99,捨入後數值成了999999.99,在范圍之內。

再看看999999.995。

SQL> insert into t1 values(999999.995);
insert into t1 values(999999.995)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column

插入失敗!原因是999999.995小數部分捨入後變成了1000000.00,超出了6位整數范圍。

2.3可以保存的最小值

負數的范圍與正數范圍對稱,所以最小值為 -999999.99

3 總結

NUMBER(8,2)表示的數字范圍為[-999999.99,999999.99]。判斷一個給定數字能否在此范圍之前,先對小數部分進行四捨五入,然後再來比較。判斷步驟:

(1)對第3位小數進行四捨五入,得到帶2位小數的數字; (2)判斷此數字是否在[-999999.99,999999.99]范圍內。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved