2014-04-11 54 views
3

我有以下SQL Server聲明,我想將其轉換爲c#。我知道在C#中有一個叫Math.Round的東西。我已經嘗試過,但C#返回相同的結果c#返回一個int返回。有關詳情請查看測試結果&如下:SQL Server'ROUND'vs C#'Math.Round'

SQL SERVER

Select ROUND(SUM(someValue)/60,0) 

C#

var alpha = Math.Round(someValue/60, 0); 

測試&結果

select ROUND(150.75, 0) 
-- Result = 151.00 

var alpha = Math.Round(150.75, 0); 
// Result = 151 

任何人都可以請建議我爲什麼不把.00放在最後。實際價值會有任何差異。我正在尋找用C#代替SQL。

感謝

+0

前夕在SQL我要求0的小數位。 – user1211185

+0

你一定在做ToString()? – Yahya

+0

我一直以爲151與151.00相同的號碼 –

回答

3

由於每table on MSDN here SQL Server的ROUND()將返回一個小數輸出一個十進制輸入。

Math.Round的過載根據輸入類型返回小數或者雙精度。

因此,您看不到.00的原因必須是您應用於結果的格式。 (推測性的,但string.FormatDebug.Writeline上的默認格式可以在內部使用技術such as this來檢索小數位數並提供默認呈現),例如,

int count = BitConverter.GetBytes(decimal.GetBits(Math.Round(150.75M, 0))[3])[2]; 
+0

謝謝,它會與實時值有所不同。因爲我打算用C#替換用SQL編寫的邏輯? – user1211185

+0

取決於您需要什麼樣的精確度 - 您是使用精確值還是可以在大量DP中允許某些錯誤? – Charleh

+0

看到這個職位的更多信息,可能會澄清你需要哪種數據類型(我在想十進制)http://stackoverflow.com/questions/1165761/decimal-vs-double-which-one-should-i-use-and -什麼時候 – Charleh

1

SQL是給你你把相同的數據類型 - 有在SQL十進制數據類型的精度設置,因爲你是用2DP指定號碼,SQL返回與2DP的值。

.NET不共享相同的數據類型,SQL,因此返回double(因爲你沒有指定輸入十進制)