日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

oracle 的float(b)转

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

今天有人問我,他把字段類型設計成float(2)后,插入數據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。

根據這段話,我們可以看到,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)。

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

總結

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

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