根据我的计算器:(100-1)/ 2 = 49.5
如果我有这样的int:
int mid = (100 - 1) / 2
打印mid会给我:
49
为什么C#会给我49而不是50?如果它是.5那么你不应该舍入到下一个整数吗?那么这个数字是50?
答案 0 :(得分:3)
当执行整数除法(我们的意思是两个参数都是整数类型)时,CLR将截断结果;有效地收集了积极的结果。
如果您想要“标准”或中点舍入,则需要明确使用Math.Round
和浮点除法(至少一个参数为float
,double
或decimal
)。
答案 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