Oracle的資料型別float b

2021-06-19 15:41:12 字數 1902 閱讀 5425

把字段型別設計成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...