2017-03-10 47 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

不客气,不用担心;)很高兴我可以帮到 –