我计算数据库的结果。 如果它低于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 。
我如何实现这一目标?
答案 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);