SQL中的real、float、decimal、numeric數據類型區別

概述:

浮點數據類型包括real型、float型、decimal型和numeric型。浮點數據類型用於存儲十進制小數。數據庫

在SQL Server 中浮點數值的數據採用上舍入(Round up)的方式進行存儲,所謂上舍入也就是,要舍入的小數部分不論其大小,測試

只要是一個非零的數,就要在該數字的最低有效位上加1,並進行必要的進位。blog

因爲浮點數據爲近似值,因此並不是數據類型範圍內的全部數據都能精確地表示。ci

 

一、區別說明

decimal(numeric):同義,用於精確存儲數值字符串

float 和 real:不能精確存儲數值數學

 

二、real數據類型

real型數據的存儲大小爲4個字節,可精確到小數點後第7位數字。數據類型

這種數據類型的數據存儲範圍爲從-3.40E+38~-1.18E-38,0和1.18E-38~3.40E+38。float

在MSSQL中real的同義詞是float,用法幾乎同樣。方法

 

三、float數據類型

float型的數據存儲大小爲8個字節,可精確到小數點後第15位數字。im

這種數據類型的數據存儲範圍爲從-1.79E+308~-2.23E-308,0和2.23E+308~1.79E+308。

FLOAT(size,d) 帶有浮動小數點的小數字。在括號中規定最大位數。在 d 參數中規定小數點右側的最大位數。

float型的數據可寫成float[(n)]的形式。其中n是1~15之間的整數值,指定float型數據的精度。當n爲1~7時,實際上用戶定義了一個real型的數據,系統用4個字節存儲;

當n爲8~15時,系統認爲它是個float型的數據,用8個字節存儲它。這樣既加強了數據定義的靈活性,又節省了空間。

 

四、decimal(numeric)數據類型

decimal數據類型和numeric數據類型的功能徹底同樣,它們均可以提供小數所須要的實際存儲空間,

但也有必定的限制,用戶能夠用2~17個字節來存儲數據,取值範圍是-1038+1~1038-1。

DECIMAL(size,d) 做爲字符串存儲的 DOUBLE 類型,容許固定的小數點。在括號中規定最大位數。

其中size表示可供存儲的值的總位數(不包括小數點),默認值爲18;d表示小數點後的位數,默認值爲0;

參數之間的關係是0≤d≤size。例如:decimal(15,5)表示共有15位數,其中整數10位,小數5位。

若一個數是上舍入數,其絕對值不會減小。如:對3.14159265358979 分別進行2 位和12位舍入,結果爲3.15 和3.141592653590。

在精度上仍是有很大的差異的,因此在建立數據庫時必定要對字段的數據類型進行精準的分析,確保在插入數據值的最大精度上不要出現差錯這樣纔不會使數據在運算的過程當中出現大的誤差。

例如在月底或者年末彙總報表時查詢出的數據是小數,在運算完之後的數據也是小數,但是在增長到彙總表裏的時候變成整數了,

這種狀況每每就是數據庫中表在創建的時候沒有有效的設置浮點型數據的小數點後面精度的問題使其數據發生了上舍入現象。

說明:

舍入是一種修約規則。在平常的生活中,咱們爲了精簡格式,記憶方便,經常用四捨五入的方法來去掉零頭或湊個整數來解決此問題。

四捨五入是一種很是靈活的方法。所以不論是在平常生活中仍是在數學計算中四捨五入方法應用的都比較普遍。

除了四捨五入的舍入方法外還有其餘不一樣的舍入規則、在數學中也有其獨特的定義。

 

建立的表:

 

實例1:

這邊我建立了個表用的real,float,decimal,我建立的字段類型是DECIMAL(3,1),長度是3,小數爲1

查詢出來的數據,遵循四捨五入,這裏我插入了88.04,因此查詢出來是88.0

 

實例2:

這邊我對decimal的字段插入88.05,查詢出來的數據是88.1

 

實例3:

這邊測試一下超過長度會怎樣,小數位在表中是保留1位,因此不管你輸入多少位,都是保留1位,也不會報錯,可是超出長度就會報錯

將 varchar 轉換爲數據類型 numeric 時出現算術溢出錯誤。

 

按照上面實例插入了兩條數據,可得知結果:

相關文章
相關標籤/搜索