为什么C#圆(100-1)/ 2到49而不是50?

时间:2016-11-15 23:14:58

标签: c# integer int rounding

根据我的计算器:(100-1)/ 2 = 49.5

如果我有这样的int:

int mid = (100 - 1) / 2

打印mid会给我:

49

为什么C#会给我49而不是50?如果它是.5那么你不应该舍入到下一个整数吗?那么这个数字是50?

3 个答案:

答案 0 :(得分:3)

当执行整数除法(我们的意思是两个参数都是整数类型)时,CLR将截断结果;有效地收集了积极的结果。

如果您想要“标准”或中点舍入,则需要明确使用Math.Round和浮点除法(至少一个参数为floatdoubledecimal )。

答案 1 :(得分:3)

这不是舍入而是整数运算,它会截断浮点数,所以

  

(100 - 1)/ 2 == 99/2 = 49.5,截断为49

  

(100-1)/ -2 = 99 / -2 = -49.5,其截短至-49

如果要进行实际舍入,则必须至少将其中一个变量设为浮点值,然后在结果上调用Cannot convert value of type 'CAShapeLayer' to expected argument type 'UIView'

答案 2 :(得分:1)

正如其他人所提到的,整数除法将被截断。这是有意义的,因为99 % 2 == 1你会期望从原始值中减去模数不会改变除法结果,即(99/2 ==(99-(99%2))/ 2),所以99/2 = 98/2