分類:
浮點數和定點數來表示小數
- 浮點類型有兩種,分別是單精度浮點數(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:
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 的類型比較好
- 另外兩個浮點數進行減法和比較運算時也容易出問題,所以在使用浮點數時需要注意,並盡量避免做浮點數比較。