国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

相關MYSQL中FLOAT和DOUBLE類型的存儲

2024-07-24 12:31:58
字體:
來源:轉載
供稿:網友
        其實在單精度和雙精度浮點類型存儲中其存儲方式和C/C++一致準守IEEE標準他們都是浮點型的,所謂的浮點型,是小數點的位置可變,其能夠表示的范圍比定點小數要廣得多,而存儲空間節省,但是受到精度的影響,所以在嚴格的數據中盡量使用定點小數mysql decimal(m,d)類型,ORACLE壓根沒有浮點數字類型而是number(p,s)定點小數,
 
     float 4字節
          1       8      23
    符號位   指數位 尾數
 
         double 8字節
          1       11     52
      符號位  指數位  尾數
      那么很明顯他們的精度取決于尾數。
      而表示的范圍取決于指數。
 
float表示范圍:
2^8=(-128—127)
-2^128—2^127
約為-3.4E38—3.4E38
double表示范圍:
2^11=(-1024—1023)
-2^1024—2^1023
約為-1.7E308—1.7E308
可以看到這個范圍實際上很廣,但是精度確很小
float精度:
float 尾數23位,2^23=8.3E6  6-7位
double尾數52位,2^52=4.5E15 14-15位
 
那么如果使用浮點數據保存了精度大于其范圍的數據其會使用四舍五入的方法截斷。
MYSQL如下:
mysql> create table dname(id1 float,id2 double,name varchar(20));
Query OK, 0 rows affected (0.08 sec)
mysql> insert into dname values(1234567.123,1234567.123,'gaopeng');
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from dname;
+---------+-------------+---------+
| id1     | id2         | name    |
+---------+-------------+---------+
| 1234570 | 1234567.123 | gaopeng |
+---------+-------------+---------+
1 row in set (0.00 sec)
雖然進行了四舍五入,但是不會有任何報錯和警告,這是其標準決定的而不是數據庫本生。
可以看到1234567.123在FLOAT下被四舍五入為1234570,而DOUBLE類型沒有問題,那么我們
直接從數據文件中提取數據。
我還是使用了自己寫的小工具BCVIEW
[root@hadoop1 test]# bcview dname.ibd 16 127 40
******************************************************************
This Tool Is Uesed For Find The Data In Binary format(Hexadecimal)
Usage:./bcview file blocksize offset cnt-bytes!                   
file: Is Your File Will To Find Data!                             
blocksize: Is N kb Block.Eg: 8 Is 8 Kb Blocksize(Oracle)!         
                         Eg: 16 Is 16 Kb Blocksize(Innodb)!       
offset:Is Every Block Offset Your Want Start!                                     
cnt-bytes:Is After Offset,How Bytes Your Want Gets!                               
Edtor QQ:22389860!                                                
Used gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)                
******************************************************************
----Current file size is :0.093750 Mb
----Current use set blockszie is 16 Kb
current block:00000000--Offset:00127--cnt bytes:40--data is:00ffffffff0000000000010000000200260000000200260000000000000000ffffffff0000ffffff
current block:00000001--Offset:00127--cnt bytes:40--data is:00000000000000000000000000000000000000000000000000000000000000000000000000000000
current block:00000002--Offset:00127--cnt bytes:40--data is:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
current block:00000003--Offset:00127--cnt bytes:40--data is:000001cc6d090000002d5679ab00000d0c011039b4964991ed7c1f87d6324167616f70656e670000
current block:00000004--Offset:00127--cnt bytes:40--data is:00000000000000000000000000000000000000000000000000000000000000000000000000000000
current block:00000005--Offset:00127--cnt bytes:40--data is:00000000000000000000000000000000000000000000000000000000000000000000000000000000
  
整數部分為100101101011010000111=1234567
關于小數部分的計算:
0*2^(0-1) 第一位
0*2^(0-2) 第二位
0*2^(0-3) 第三位
1*2^(0-4)=1/16 第四位
1*2^(0-5)=1/32 第五位
1*2^(0-6)=1/64 第六位
.....
及0.123=0.0001111101111100其額外的部分為無效數字
 
實際上數據是沒有問題的。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰都县| 上思县| 佛山市| 浦东新区| 高雄县| 常山县| 肇庆市| 吴忠市| 和硕县| 湘乡市| 济南市| 晋城| 涟源市| 永清县| 阳西县| 探索| 崇仁县| 石景山区| 招远市| 成都市| 剑阁县| 沙雅县| 屏边| 盈江县| 丁青县| 乌鲁木齐县| 邛崃市| 四川省| 繁昌县| 印江| 防城港市| 天门市| 彩票| 汝南县| 游戏| 建昌县| 鄂尔多斯市| 石门县| 横峰县| 乌苏市| 广汉市|