MySQL小数类型
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 中的小數類型和存儲需求。
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)。
浮點數相對于定點數的優點是在長度一定的情況下,浮點數能夠表示更大的范圍;缺點是會引起精度問題。
總結
- 上一篇: Java是如何实现跨平台的,原理是什么?
- 下一篇: Redis内存回收策略