MySQL數據類型--浮點數類型和定點數類型

  • MySQL中使用浮點數類型和定點數類型來表示小數。

浮點數類型包括單精度浮點數(float型)和雙精度浮點數(double型)。定點數類型就是decimal型。

OK,現在我們來看看這幾種數據類型的取值範圍和存數的字節數。


關於上表的解釋:

1,Decimal型的取值範圍和double相同。但是decimal的有效取值範圍由M和D決定,而且Decimal型的字節數是M+2。也就是說,定點數的存儲空間是根據其精度決定的。

2,MySQL中可以指定浮點數和定點數的精度。其基本形式如下:數據類型(M,D)。

其中,“數據類型”參數是浮點數或定點數的數據類型名稱,M參數稱爲精度,是數據的總長度,小數點不佔位置。D參數成爲標度,是指小數點後面的長度是D。

舉個例子:float(6,2)的含義數據是float型,數據長度是6,小數點後保留2位。所以,1234.56是符合要求的。

3,注意:上述指定的小數精度的方法雖然都適用於浮點數和定點數,但不是浮點數的標準用法。建議在定義浮點數時,如果不是實際情況需要,最好不要使用,如果使用了,可能會影響數據庫的遷移。

4,相反,對於定點數而言,decimal(M,D)是定點數的標準格式,一般情況下可以選擇這種數據類型。

5,如果插入值的精度高於實際定義的精度,系統會自動進行四捨五入處理,使值的精度達到要求。


  • OK,現在我們來舉幾個實際的例子:

1,指定精度的情況。

建表語句如下:

CREATE TABLE `linkinframe`.`test` (
  `id` INT NOT NULL,
  `a` FLOAT(6,2) NULL,
  `b` DOUBLE(6,2) NULL,
  `c` DECIMAL(6,2) NULL,
  PRIMARY KEY (`id`));
現在我們往表中插入幾條數據:
INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`,`c`) VALUES ('1', '1.111', '1.117','1.117');
 INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`,`c`) VALUES ('2', '1234567', '1234.892','1234.892');

數據庫現在顯示數據如下:



 2,未指定精度的情況。

浮點數和定點數有其默認的精度,float和double默認會保存實際精度,但這與操作系統和硬件的精度有關。decimal型的默認整數位爲10,小數位爲0,即默認爲整數。


建表語句如下:

CREATE TABLE `linkinframe`.`test` (
  `id` INT NOT NULL,
  `a` FLOAT NULL,
  `b` DOUBLE NULL,
  `c` DECIMAL NULL,
  PRIMARY KEY (`id`));
現在我們插入一條數據:

INSERT INTO `linkinframe`.`test` (`id`, `a`, `b`,`c`) VALUES ('1', '3.1415', '3.14159','3.14159');
 
OK,現在數據庫顯示如下:




  • 總結:

在MySQL中,定點數以字符串形式存儲,因此,其精度比浮點數要高,而且浮點數會出現誤差,這是浮點數一直存在的缺陷。如果要對數據的精度要求比較高,還是選擇定點數decimal比較安全。

發佈了284 篇原創文章 · 獲贊 66 · 訪問量 71萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章