首頁 > mysql教程 閱讀:0更新時間:2020-03-28 04:06:09

MySQL FLOAT、DOUBLE、DECIMAL(小數類型)

mysql 中使用浮點數和定點數來表示小數。

浮點類型有兩種,分別是單精度浮點數(FLOAT)和雙精度浮點數(DOUBLE);定點類型只有一種,就是 DECIMAL。

浮點類型和定點類型都可以用(M, D)來表示,其中M稱為精度,表示總共的位數;D稱為標度,表示小數的位數。

浮點數類型的取值范圍為 M(1~255)和 D(1~30,且不能大于 M-2),分別表示顯示寬度和小數位數。M 和 D 在 FLOAT 和DOUBLE 中是可選的,FLOAT 和 DOUBLE 類型將被保存為硬件所支持的最大精度。DECIMAL 的默認 D 值為 0、M 值為 10。

下表中列出了 MySQL 中的小數類型和存儲需求。

類型名稱 說明 存儲需求
FLOAT 單精度浮點數 4 個字節
DOUBLE 雙精度浮點數 8 個字節
DECIMAL (M, D),DEC 壓縮的“嚴格”定點數 M+2 個字節

DECIMAL 類型不同于 FLOAT 和 DOUBLE。DOUBLE 實際上是以字符串的形式存放的,DECIMAL 可能的最大取值范圍與 DOUBLE 相同,但是有效的取值范圍由 M 和 D 決定。如果改變 M 而固定 D,則取值范圍將隨 M 的變大而變大。

從上表中可以看到,DECIMAL 的存儲空間并不是固定的,而由精度值 M 決定,占用 M+2 個字節。

FLOAT 類型的取值范圍如下:
  • 有符號的取值范圍:-3.402823466E+38~-1.175494351E-38。
  • 無符號的取值范圍:0 和 -1.175494351E-38~-3.402823466E+38。

DOUBLE 類型的取值范圍如下:
  • 有符號的取值范圍:-1.7976931348623157E+308~-2.2250738585072014E-308。
  • 無符號的取值范圍:0 和 -2.2250738585072014E-308~-1.7976931348623157E+308。
提示:不論是定點還是浮點類型,如果用戶指定的精度超出精度范圍,則會四舍五入進行處理。
FLOAT 和 DOUBLE 在不指定精度時,默認會按照實際的精度(由計算機硬件和操作系統決定),DECIMAL 如果不指定精度,默認為(10,0)。

浮點數相對于定點數的優點是在長度一定的情況下,浮點數能夠表示更大的范圍;缺點是會引起精度問題。

最后再強調一下:在 MySQL 中,定點數以字符串形式存儲,在對精度要求比較高的時候(如貨幣、科學數據),使用 DECIMAL 的類型比較好,另外兩個浮點數進行減法和比較運算時也容易出問題,所以在使用浮點數時需要注意,并盡量避免做浮點數比較。

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

国产亚洲欧美日韩