oracle中數據類型number(m,n)中m表示的是所有有效數字的位數,n表示的是小數位的位數。m的范圍是1-38,即最大38位。
1> .NUMBER類型細講:
Oracle number datatype 語法:NUMBER[(precision [, scale])]
簡稱:precision --> p
scale --> s
NUMBER(p, s)
范圍: 1 <= p <= 38,
-84 <= s <= 127
保存數據范圍: -1.0e-130 <= number value < 1.0e+126
保存在機器內部的范圍: 1 ~ 22 bytes
有效位:從左邊第一個不為0的數算起的位數。
s的情況:
s > 0
精確到小數點右邊s位,並四舍五入。然后檢驗有效位是否 <= p。
s < 0
精確到小數點左邊s位,並四舍五入。然后檢驗有效位是否 <= p + |s|。
s = 0
此時NUMBER表示整數。
eg:
Actual Data Specified As Stored As
----------------------------------------
123.89 NUMBER 123.89
123.89 NUMBER(3) 124
123.89 NUMBER(6,2) 123.89
123.89 NUMBER(6,1) 123.9
123.89 NUMBER(4,2) exceeds precision (有效位為5, 5 > 4)
123.89 NUMBER(6,-2) 100
.01234 NUMBER(4,5) .01234 (有效位為4)
.00012 NUMBER(4,5) .00012
.000127 NUMBER(4,5) .00013
.0000012 NUMBER(2,7) .0000012
.00000123 NUMBER(2,7) .0000012
1.2e-4 NUMBER(2,5) 0.00012
1.2e-5 NUMBER(2,5) 0.00001
123.2564 NUMBER 123.2564
1234.9876 NUMBER(6,2) 1234.99
12345.12345 NUMBER(6,2) Error (有效位為5+2 > 6)
1234.9876 NUMBER(6) 1235 (s沒有表示s=0)
12345.345 NUMBER(5,-2) 12300
1234567 NUMBER(5,-2) 1234600
12345678 NUMBER(5,-2) Error (有效位為8 > 7)
123456789 NUMBER(5,-4) 123460000
1234567890 NUMBER(5,-4) Error (有效位為10 > 9)
12345.58 NUMBER(*, 1) 12345.6
0.1 NUMBER(4,5) Error (0.10000, 有效位為5 > 4)
0.01234567 NUMBER(4,5) 0.01235
0.09999 NUMBER(4,5) 0.09999
----------
在Oracle中Number類型可以用來存儲0,正負定點或者浮點數,可表示的數據范圍在
1.0 * 10(-130) —— 9.9...9 * 10(125) {38個9后邊帶88個0}
的數字,當Oracle中的數學表達式的值>=1.0*10(126)時,Oracle就會報錯。
Number的數據聲明如下:
表示 作用 說明
Number(p, s) 聲明一個定點數 p(precision)為精度,s(scale)表示小數點右邊的數字個數,精度最大值為38,scale的取值范圍為-84到127
Number(p) 聲明一個整數 相當於Number(p, 0)
Number 聲明一個浮點數 其精度為38,要注意的是scale的值沒有應用,也就是說scale的指不能簡單的理解為0,或者其他的數。
定點數的精度(p)和刻度(s)遵循以下規則:
當一個數的整數部分的長度 > p-s 時,Oracle就會報錯
當一個數的小數部分的長度 > s 時,Oracle就會舍入。
當s(scale)為負數時,Oracle就對小數點左邊的s個數字進行舍入。
當s > p 時, p表示小數點后第s位向左最多可以有多少位數字,如果大於p則Oracle報錯,小數點后s位向右的數字被舍入