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


概述:

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

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

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

由於浮點數據為近似值,所以並非數據類型范圍內的所有數據都能精確地表示。

 

1、區別說明

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

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

 

2、real數據類型

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

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

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

 

3、float數據類型

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

這種數據類型的數據存儲范圍為從-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個字節存儲它。這樣既增強了數據定義的靈活性,又節省了空間。

 

4、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 時出現算術溢出錯誤。

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM