2017-03-10 43 views
1

我正在計算我的數據庫的結果。 如果是較低的,然後50,我想2 實例來劃分他們:C#向上和​​向下舍入

if(CountResults < 50) 
{ 
    //CountResults = 39 
    int divided = CountResults/2; //Results in 19 
} 

我想要什麼:

if(CountResults < 50) 
{ 
    //CountResults = 39 
    int divided = CountResults/2; //Results in 19,5 
    Math.Round(divided, 0); 
} 

我希望能夠向上和向下舍它。

所以我得到結果19.5兩次。一旦我希望它是,並且一次是20.

我該如何做到這一點?

+1

用'2.0'代替'2'代替它。 – DavidG

+1

首先,默認情況下C#使用整數數學 - 當你用整數除整數時,你得到整數。其次 - 你只顯示第一段代碼。你如何獲得第二個結果?目前尚不清楚,你如何在'劃分變量' –

+0

@SergeyBerezovskiy中得到兩個結果來獲得CountResults,我循環查詢結果,並通過Int CountResults對它們進行計數。這樣我知道我有多少結果。然後我想把它除以2。 – Mitch

回答

5

目前尚不清楚你將如何使用兩次你的代碼,但如果你想整分成兩個整數部分只是減去第一個結果彙總:

if(CountResults < 50) 
{ 
    //CountResults = 39 
    int divided1 = CountResults/2;  // 19 
    int divided2 = CountResults - divided1; // 20 
} 

第一個結果將使用整數除法,它會讓您的結果趨向零(在您的情況下爲19)。進一步閱讀:C# Specification 7.7.2 Division Operator

第二個結果會給你休息,這將等於第一個結果(如果沒有舍入),或者它將等於從零(在你的情況下爲20)四捨五入。

+1

這對我來說很好。很簡單,但我沒有想到它:/ 謝謝! – Mitch

+2

@Mitch只記得C#中的整數除法(我已經爲你添加了鏈接) –

3

舍入部分可以使用這些2種好的方法來實現:

Math.Floor它帶給地板

Math.Celing它升降機有天頂)

計算部分稍微更棘手。本聲明:

int divided = CountResults/2; //Results in 19,5 

真的不能是真實的,還是讓我們說什麼並不重要是逗號後面的,因爲當它被賦值給變量int devided就會失去這個信息,並且不再需要任何舍入。
如果你想得到類型爲double(意思是例如19,5)的結果並且你想要舍入該結果,至少需要計算的一個參數爲雙重型號double

double var1 = 39; 

int res_low = (int)Math.Floor(var1/2); 
int res_high = (int)Math.Ceiling(var1/2); 

注意,寫入2是由編譯器隱式地被視爲int和寫入2.0被隱式地被視爲double。因此,這將產生相同的結果:

int var2 = 39; 

int res_low2 = (int)Math.Floor(var2/2.0); 
int res_high2 = (int)Math.Ceiling(var2/2.0); 
+1

謝謝,這也正在工作。如果我可以接受多個答案,我會。 – Mitch

+1

不客氣,不用擔心;)很高興我可以幫到 –