排查一項問題的時候發現,上一個開發人員為了方便將double 類型 在數據庫里轉換為了varchar(50),然后再程序中再轉為double.....
CAST((CASE WHEN M1.ApplyAmt IS NOT NULL THEN M1.ApplyAmt ELSE 0 END)AS NVARCHAR(100) 這行代碼查詢的時候被表示成了科學計數法,再轉為doub的時候出現了精度丟失。
一直覺得float和double類型在sql server和其他語言等日常編程中沒有用途,而且容易造成麻煩(計算時出現近似值)等,建議使用decimal(18,2),但是老的程序就是這么設計的....
解決方法:需將float/double等數據類型轉為標准的decimal類型后轉nvarchar即可
CONVERT (nvarchar (50),CONVERT (DECIMAL (18,2),(CASE WHEN M1.ApplyAmt IS NOT NULL THEN M1.ApplyAmt ELSE 0 END ))) AS [VALUE]
關於 CAST 和 CONVERT
具體大家可以查閱一下官方資料