C#上下左右

时间:2017-03-10 10:52:15

标签: c#

我计算数据库的结果。 如果它低于50,我想将它们除以2。 例如:

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 两次。一旦我希望它 19 ,一旦 20

我如何实现这一目标?

2 个答案:

答案 0 :(得分: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 :(得分:3)

可以使用以下两种不错的方法完成舍入部分:

Math.Floor将其带到场内

Math.Celing将它提升到celing;)

计算部分有点棘手。这句话:

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

实际上不可能是真的,或者说逗号背后的内容并不重要,因为当它被分配给变量int devided时,它将丢失此信息并且不再需要舍入。
当您需要类型double的结果(意味着例如19,5)并且您想要对该结果进行舍入时,您至少需要计算的一个参数为double 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);