FLOAT型別的官方描述:
用於表示浮點數值資料的大致數值資料型別。浮點資料為近似值;因此,並非資料型別範圍內的所有值都能精確地表示。
上面已經告訴我們了一句話,就是不要太相信它喔。
TSQL提供了一個專門的代表實數的資料型別。事實上它提供了兩種實數型別:REAL和FLOAT,不過這些資料型別和SQLSERVER的其他資料型別(其中一些型別據稱是精確的型別)都不是嚴格數學意義上的實數系統。
數字的計算機表示對算數運算來說不是真實的,雖然它們可以滿足大多數需求,但不能為所有問題提供“正確的答案”。
下面舉例說明:
Real型別的不真實性:
這個不符合乘法的結合律a(bc)=(ab)c,但是對於SQLSever中實數和運算的表示,這兩個式子則不相等,SQLServer在這一點上並沒有任何錯誤,這樣的結果符合浮點運算的重要IEEE標準。
Float型別的不真實性:
12.055進位應該是12.06結果卻為12.05
另外的還補充一點,就是.NET中的Math.Round()這個函式預設的是採用銀行家演算法,這個函式還有哥帶有列舉值的引數,這個引數可以指定使用哪種四捨五入的方法(其中包括傳統的四捨五入的方法和採用銀行家演算法的四捨五入的方法)
如果使用 money 或 numeric 資料型別,那麼,內部轉換為 float 可能會降低精度。
所以在進行精確財務計算時,請儘量少使用float和real這樣的數字型別,雖然這兩種資料型別速度要快。
————————————————
版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。
原文連結:https://blog.csdn.net/lulei6/article/details/106686626/