http://zhidao.baidu.com/link?url=yvsR3r2G6wemYZxZZTfygP0Sf4lxVxkusF8ZbU0QLE82cB590XHtzsZtpYG-7HBLOnZL2M3ytd41WZYEL70RFa http://www.linuxidc.com/Linux/2013-07/88032.htm 可能做程式的人都知道,float類型是可以存浮點數(即小數類型),但是float
http://zhidao.baidu.com/link?url=yvsR3r2G6wemYZxZZTfygP0Sf4lxVxkusF8ZbU0QLE82cB590XHtzsZtpYG-7HBLOnZL2M3ytd41WZYEL70RFa
http://www.linuxidc.com/Linux/2013-07/88032.htm
可能做程式的人都知道,float類型是可以存浮點數(即小數類型),但是float有個壞處,當你給定的資料是整數的時候,那麼它就以整數給你處理。這樣我們在存取貨币值的時候自然遇到問題,我的default值為:0.00而實際存儲是0,同樣我存取貨币為12.00,實際存儲是12.
幸好mysql提供了兩個資料類型:numeric和decimal,這兩種資料類型可以輕松解決上面的問題:
NUMERIC 和 DECIMAL 類型被 MySQL 以同樣的類型實作,這在 SQL92 标準中是允許的。他們用于儲存對準确精度有重要要求的值,例如與金錢有關的資料。當以它們中的之一聲明一個列時,精度和數值範圍可以(通常是)被指定;例 如:
salary DECIMAL(5,2)
在這個例子中,5 (精度(precision)) 代表重要的十進制數字的數目,2 (資料範圍(scale)) 代表在小數點後的數字位數。在這種情況下,是以,salary 列可以存儲的值範圍是從 -99.99 到 99.99。(實際上 MySQL 在這個列中可以存儲的數值可以一直到 999.99,因為它沒有存儲正數的符号)。
譯者注:
M 與D 對DECIMAL(M, D) 取值範圍的影響
類型說明 取值範圍(MySQL < 3.23) 取值範圍(MySQL >= 3.23)
1.首先,對于精度比較高的東西,比如money,我會用decimal類型,不會考慮float,double,因為他們容易産生誤差,numeric和decimal同義,numeric将自動轉成decimal。
DECIMAL從MySQL 5.1引入,列的聲明文法是DECIMAL(M,D)。在MySQL 5.1中,參量的取值範圍如下:
·M是數字的最大數(精度)。其範圍為1~65(在較舊的MySQL版本中,允許的範圍是1~254),M 的預設值是10。
·D是小數點右側數字的數目(标度)。其範圍是0~30,但不得超過M。
說明:float占4個位元組,double占8個位元組,decimail(M,D)占M+2個位元組。
如DECIMAL(5,2) 的最大值為9 9 9 9 . 9 9,因為有7 個位元組可用。
M 與D 對DECIMAL(M, D) 取值範圍的影響
類型說明取值範圍(MySQL < 3.23)取值範圍(MySQL >= 3.23)
MySQL < 3.23 MySQL >=3.23DECIMAL(4, 1) -9.9到99.9 -999.9到9999.9
DECIMAL(5,1) -99.9 到 999.9 -9999.9 到 99999.9
DECIMAL(6,1) -999.9 到 9999.9 -99999.9 到 999999.9
DECIMAL(6,2) -99.99 到 999.99 -9999.99 到 99999.99
DECIMAL(6,3) -9.999 到 99.999 -999.999 到 9999.999
# 在MySQL 3.23 及以後的版本中,DECIMAL(M, D) 的取值範圍等于早期版本中的DECIMAL(M + 2, D)的取值範圍。
結論:
當數值在其取值範圍之内,小數位多了,則直接截斷小數位。
若數值在其取值範圍之外,則用最大(小)值對其填充。
本文原創釋出php中文網,轉載請注明出處,感謝您的尊重!