oracle 的float(b)转
今天有人問我,他把字段類型設計成float(2)后,插入數(shù)據(jù)93.5,后,為什么變成了90?
為了說明這個問題,我們先來看一段話(http://www.cnoug.org/viewthread.php?tid=56643):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。
根據(jù)這段話,我們可以看到,float(2)中的2是一個binary precision,而不是我們常用的decimal precision。他們之間的換算關(guān)系是:binary precision=int(b*0.30103),因此我們這里實際上的精度應該等于int(2*0.30103)=0,即小數(shù)點后精度為0。
回到我們原來的問題,93.5化成浮點型9.35*10^1,這時9.35小數(shù)點后精度為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。
我們可以從以下測試更加清楚的看到這樣的換算規(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>
請?zhí)貏e注意的是,雖然我在設計表的時候設計成了float(2)、float(10),但是當我在desc表(代碼最后7列)的時候卻是看不到這樣的設計結(jié)構(gòu)的,這樣的問題需要尤其引起注意!!
最后,讓我們回顧一下,記住float(b)中的b是二進制的精度,他的換算規(guī)則是binary precision=int(b*0.30103)。
轉(zhuǎn)載于:https://www.cnblogs.com/boulder19830907/archive/2008/01/31/1059627.html
總結(jié)
以上是生活随笔為你收集整理的oracle 的float(b)转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IB客座主编(一)--安普布线亚太区业务
- 下一篇: Ubuntu 下Ape转Mp3[8825