時(shí)間:2015/6/28來(lái)源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)
把字段類(lèi)型設(shè)計(jì)成float(2)后,插入數(shù)據(jù)93.5,后,為什么變成了90?
為了說(shuō)明這個(gè)問(wèn)題,我們先來(lái)看一段話(huà):oracle Online Help 說(shuō):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。
根據(jù)這段話(huà),我們可以看到,float(2)中的2是一個(gè)binary precision,而不是我們常用的decimal precision。他們之間的換算關(guān)系是:binary precision=int(b*0.30103),因此我們這里實(shí)際上的精度應(yīng)該等于int(2*0.30103)=0,即小數(shù)點(diǎn)后精度為0。
回到我們?cè)瓉?lái)的問(wèn)題,93.5化成浮點(diǎn)型9.35*10^1,這時(shí)9.35小數(shù)點(diǎn)后精度為0,成9,因此最后變成9*10^1=90。
類(lèi)似的,我們可以設(shè)計(jì)成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。
我們可以從以下測(cè)試更加清楚的看到這樣的換算規(guī)則。
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>
請(qǐng)?zhí)貏e注意的是,雖然我在設(shè)計(jì)表的時(shí)候設(shè)計(jì)成了float(2)、float(10),但是當(dāng)我在desc表(代碼最后7列)的時(shí)候卻是看不到這樣的設(shè)計(jì)結(jié)構(gòu)的,這樣的問(wèn)題需要尤其引起注意!
最后,讓我們回顧一下,記住float(b)中的b是二進(jìn)制的精度,他的換算規(guī)則是binary precision=int(b*0.30103)。
關(guān)鍵詞標(biāo)簽:ORACLE,數(shù)據(jù)類(lèi)型
相關(guān)閱讀
熱門(mén)文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程使用screen管理你的遠(yuǎn)程會(huì)話(huà)GNU/Linux安裝vmware如何登錄linux vps圖形界面 Linux遠(yuǎn)程桌面連
人氣排行 Linux下獲取CPUID、硬盤(pán)序列號(hào)與MAC地址linux tc實(shí)現(xiàn)ip流量限制dmidecode命令查看內(nèi)存型號(hào)linux下解壓rar文件安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程Ubuntu linux 關(guān)機(jī)、重啟、注銷(xiāo) 命令lcx.exe、nc.exe、sc.exe入侵中的使用方法查看linux服務(wù)器硬盤(pán)IO讀寫(xiě)負(fù)載