把字段型別設計成float(2)後,插入資料93.5,後,為什麼變成了90?
為了說明這個問題,我們先來看一段話:oracle online help 說:float(b) specifies a floating-point number with binary precision b. the precision b can range from 1 to 126. to convert from binary to decimal precision, multiply b by 0.30103。
根據這段話,我們可以看到,float(2)中的2是乙個binary precision,而不是我們常用的decimal precision。他們之間的換算關係是:binary precision=int(b*0.30103),因此我們這裡實際上的精度應該等於int(2*0.30103)=0,即小數點後精度為0。
回到我們原來的問題,93.5化成浮點型9.35*10^1,這時9.35小數點後精度為0,成9,因此最後變成9*10^1=90。
類似的,我們可以設計成float(10),那麼int(10*0.30103)=3,因此,如果插入93.5,就得出9.35--精度為3-->9.350,9.350*10^1=93.5。如果插入13884.2,得出1.38842--精度為3-->1.388,1.388*10^4=13880。
我們可以從以下測試更加清楚的看到這樣的換算規則。
connected to oracle9i enterprise edition release 9.0.1.1.1
connected as aspire
sql>
sql> create table hjm_float_test
2 (a float(2),
3 b float(10),
4 c float,
5 d number);
table created
sql> insert into hjm_float_test(a,b,c,d) values(93.5,93.5,93.5,93.5);
1 row inserted
sql> insert into hjm_float_test(a,b,c,d) values(93.665,93.665,93.665,93.665);
1 row inserted
sql> insert into hjm_float_test(a,b,c,d) values(96.5,96.5,96.5,96.5);
1 row inserted
sql> insert into hjm_float_test(a,b,c,d) values(13884.2,13884.2,13884.2,13884.2);
1 row inserted
sql> commit;
commit complete
sql> select * from hjm_float_test;
a b c d
90 93.5 93.5 93.5
90 93.67 93.665 93.665
100 96.5 96.5 96.5
1000 13880 13884.2 13884.2
sql> desc hjm_float_test;
name type nullable default comments
a float y
b float y
c float y
d number y
sql>
請特別注意的是,雖然我在設計表的時候設計成了float(2)、float(10),但是當我在desc表(**最後7列)的時候卻是看不到這樣的設計結構的,這樣的問題需要尤其引起注意!!
最後,讓我們回顧一下,記住float(b)中的b是二進位制的精度,他的換算規則是binary precision=int(b*0.30103)。
Oracle 的資料型別
oracle的內建資料型別可以分為3大類,即標量資料型別 幾何資料型別和關係資料型別。下面分別介紹這些資料型別 1 表量資料型別 標量資料型別是一般的資料型別,可以返回標量值。標量資料型別可以由字元資料型別 數字資料型別 日期資料型別 raw資料型別 大物件資料型別和行資料型別組成。字元資料型別可以...
oracle 的資料型別
資料型別 datatype 是列 column 或儲存過程中的乙個屬性。oracle支援的資料型別可以分為三個基本種類 字元資料型別 char char資料型別儲存固定長度的字元值。乙個char資料型別可以包括1到2000個字元。如果對char沒有明確地說明長度,它的預設長度則設定為1.如果對某個c...
oracle的資料型別
資料型別 引數描述 char n n 1 to 2000位元組 定長字串,n位元組長,如果不指定長度,預設為1個位元組長 乙個漢字為2位元組 varchar2 n n 1 to 4000位元組 可變長的字串,具體定義時指明最大長度n,這種資料型別可以放數字 字母以及ascii碼字符集 或者ebcdi...