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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

oracle 中符号%3e,Oracle数据类型-----(数字格式)

發布時間:2023/12/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 中符号%3e,Oracle数据类型-----(数字格式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

任何一個實數都是可以表示為:S=A.B*10n(10的n次方)。則我們只是需要存儲A.B(數據部分),n(最高表示位)即可??墒莖racle 還存儲了符號位(負數需要用到)。

create table test_number ( num_col number);

SQL> INSERT INTO TEST_NUMBER VALUES (0);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (1);

1 row inserted

SQL>? INSERT INTO TEST_NUMBER VALUES (2);

1 row inserted

SQL>? INSERT INTO TEST_NUMBER VALUES (25);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (123);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (4100);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (132004078);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (2.01);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (0.3);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (0.00000125);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (115.200003);

1 row inserted

SQL>? INSERT INTO TEST_NUMBER VALUES (-1);

1 row inserted

SQL>? INSERT INTO TEST_NUMBER VALUES (-2);

1 row inserted

SQL>? INSERT INTO TEST_NUMBER VALUES (-20032);

1 row inserted

SQL> INSERT INTO TEST_NUMBER VALUES (-234.432);

1 row inserted

SQL>? COMMIT;

Commit complete

SQL> SELECT NUM_COL, DUMP(NUM_COL, 16) D_NUMBER FROM TEST_NUMBER;

NUM_COL?????????? D_NUMBER

---------- --------------------------------------------------------------------------------

0??????????????? Typ=2 Len=1: 80

1??????????????? Typ=2 Len=2: c1,2

2??????????????? Typ=2 Len=2: c1,3

25?????????????? Typ=2 Len=2: c1,1a

123????????????? Typ=2 Len=3: c2,2,18

4100???????????? Typ=2 Len=2: c2,2a

132004078??????? Typ=2 Len=6: c5,2,21,1,29,4f

2.01????????????? Typ=2 Len=3: c1,3,2

0.3?????????????? Typ=2 Len=2: c0,1f

1.25E-6??????????? Typ=2 Len=3: be,2,1a

115.200003??????? Typ=2 Len=6: c2,2,10,15,1,4

-1??????????????? Typ=2 Len=3: 3e,64,66

-2??????????????? Typ=2 Len=3: 3e,63,66

-20032??????????? Typ=2 Len=5: 3c,63,65,45,66

-234.432?????????? Typ=2 Len=6: 3d,63,43,3a,51,66

15 rows selected

0 :沒有數據部分,只存儲了一個最高表示位。

1 :最高表示位 為 C1 。這是為什么那??

正數和負數具有相同的取值范圍,所以,正數的最高表示位 > 80 ; 負數的最高表示位 < 80 。

但是正數部分又分為:大于1的數和小數,并且同樣具有相同的取值范圍。

計算公式如下:

SQL>? select round( (to_number('ff','xx') - to_number('80','xx'))/2 + to_number('80','xx') ) + 1 from dual ;

ROUND((TO_NUMBER('FF','XX')-TO

------------------------------

193

SQL> select to_char('193','xx') from dual;

TO_CHAR('193','XX')

-------------------

c1

所以,個數的最高表示位為:C1。

則百位的最高表示位為C2,萬位的最高表示位為C3,百分位的最高表示位為C0,萬分位的最高表示位為C0,以此類推。

這又是為什么哪?

Oracle每個字節表示2位數,兩位數之間相差的是100(即10的平方)。所以百位的最高表示位為C2.

但是oracle又為什么用0x2表示1哪???

對于這個2位數,出現的可能是0~99共100種可能,問題出在0這里。Oracle底層是用C語言實現的,我們知道二進制0在C語言中用作字符串終結符,Oracle為了避免這個問題,因此使用了0x1表示0,并依次類推,使用0x64表示99。

-1??????????????? Typ=2 Len=3: 3e,64,66 , 最高表示位 為什么 是 3e??

因為,負數和正數互為相反數。其最高表示位相加為 255 , 數據部分相加為:66 。所以-1的最高表示位為 3e。

SQL> select to_char('193','xx') from dual;

TO_CHAR('193','XX')

-------------------

c1

SQL> select to_number('3e','xx') from dual ;

TO_NUMBER('3E','XX')

--------------------

62

負數的數據部分用 65 到 2 進行表示。

總結

以上是生活随笔為你收集整理的oracle 中符号%3e,Oracle数据类型-----(数字格式)的全部內容,希望文章能夠幫你解決所遇到的問題。

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