爲什麼SQL Server中的舍入行爲非直觀?SQL Server根據數據類型舍入不同
SELECT CAST( 19.845 AS DECIMAL(18, 2)) AS [DecOK]
,CAST(CAST(19.845 AS FLOAT) AS DECIMAL(18, 2)) AS [DecBad]
,CAST(19.845 AS FLOAT) AS [Float]
,CAST(19.845 AS FLOAT) - 19.845 AS [NoDiff]
,ROUND( 19.845 , 2) AS [RoundOK]
,ROUND(CAST(19.845 AS FLOAT), 2) AS [RoundBad]
實際:
DecOK DecBad Float NoDiff RoundOK RoundBad
19.85 19.84 19.845 0 19.850 19.84
預計:
DecOK DecBad Float NoDiff RoundOK RoundBad
19.85 19.85 19.845 0 19.850 19.85
我期望的值是相同的,而不管數據類型。如何在使用FLOAT時保證準確的結果? NoDiff
值是否將第二個值隱式轉換爲FLOAT,這就是爲什麼結果恰好爲0?
https://stackoverflow.com/questions/9526386/rounding-issue-with-sql-server-and-real-datatype – artm
*我怎樣才能保證準確的結果,用浮漂工作時*答案是**大否**。在MSDN中明確指出:「* Float是用於浮點數字數據的近似數字數據類型,浮點數據是近似值;因此,並非數據類型範圍中的所有值都可以精確表示*」 –