天天看點

mysql decimal類型與decimal長度用法詳解

原文出處: https://www.cnblogs.com/Anidot/articles/7668158.html

三者的差別介紹 

float:浮點型,含位元組數為4,32bit,數值範圍為-3.4E38~3.4E38(7個有效位)

double:雙精度實型,含位元組數為8,64bit數值範圍-1.7E308~1.7E308(15個有效位)

decimal:數字型,128bit,不存在精度損失,常用于銀行帳目計算。(28個有效位)

按存儲的範圍進行排序

float(real)

double

decimal(numeric)

decimal的詳細介紹

decimal(a,b)

參數說明

a指定指定小數點左邊和右邊可以存儲的十進制數字的最大個數,最大精度38。

b指定小數點右邊可以存儲的十進制數字的最大個數。小數位數必須是從 0 到 a之間的值。預設小數位數是 0。

備注

  DECIMAL資料類型用于要求非常高的精确度的計算中,這些類型允許指定數值的精确度和計數方法作為選擇參數。精确度在這裡是指為這個值儲存的有效數字的總個數,而計數方法表示小數點後數字的個數。例如,語句DECIMAL (5,2)規定了存儲的值将不會超過5位數字,開且小數點後面有2位數字。

執行個體

  SQL 代碼    複制

float f = 345.98756f;--結果顯示為345.9876,隻顯示7個有效位,對最後一位數四舍五入。

double d=345.975423578631442d;--結果顯示為345.975423578631,隻顯示15個有效位,對最後一位四舍五入。

--注:float和double的相乘操作,數字溢出不會報錯,會有精度的損失。

decimal dd=345.545454879.....--可以支援28位,對最後一位四舍五入。

--:當對decimal類型進行操作時,數值會因溢出而報錯。
      

總結

  數值存儲範圍越小的精度越高,存儲數值範圍越大,精度就越不準确,如果存儲正常金額的情況下,使用money,好處在于可以存儲不指定的小數點位數的數值,比較真實。如果對于既要求精度,又固定小數點位數的數值存儲,采用decimal(numeric),優點在于可以自定義小數點位數,精度高。如特殊情況,如數值範圍巨大隻能用float(real)類型了,此類型一般不提倡使用。

mysql中的decimal字段,聲明文法為DECIMAL(M,D)。

  DECIMAL(M,D)中D值的是小數部分的位數,若插入的值未指定小數部分或者小數部分不足D位則會自動補到D位小數,若插入的值小數部分超過了D為則會發生截斷,截取前D位小數(四舍五入截取)。M值得是整數部分加小數部分的總長度,也即插入的數字整數部分不能超過M-D位,否則不能成功插入,會報超出範圍的錯誤。

decimal精度類型,函數完整格式DECIMAL(M,D)

  M是是隻的最大精度數位,1-65

  D是小數點右側數位0-30

舉例說明,11615.23653234568這個數存你說的三個格式

  decimal:11615

    decimal(3):999

    decimal(3,2):9.99

    decimal(10,5)11615.23653

超出精度範圍的數會被強制進位并隻顯示資料類型定義的格式

繼續閱讀