Oracle資料庫中NUMBER(x,y)資料類型詳解,oraclenumber

來源:互聯網
上載者:User

Oracle資料庫中NUMBER(x,y)資料類型詳解,oraclenumber

  • 實驗準備
  • 分析並實驗
    • 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]範圍內。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.