日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 的float(b)转

發(fā)布時間:2025/7/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 的float(b)转 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天有人問我,他把字段類型設計成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。他們之間的換算關系是: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列)的時候卻是看不到這樣的設計結構的,這樣的問題需要尤其引起注意!!

最后,讓我們回顧一下,記住float(b)中的b是二進制的精度,他的換算規(guī)則是binary precision=int(b*0.30103)。

轉載于:https://www.cnblogs.com/boulder19830907/archive/2008/01/31/1059627.html

總結

以上是生活随笔為你收集整理的oracle 的float(b)转的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。