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.23SQL> 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]範圍內。