为什么c#将(100-1)/2四舍五入而不是50 ?
本文关键字:四舍五入 100-1 为什么 | 更新日期: 2023-09-27 18:18:18
根据我的计算器:(100-1)/2 = 49.5
如果我有一个像这样的整型:
int mid = (100 - 1) / 2
和打印中间会给我:
49
为什么c#会给我49而不是50?如果是0.5,你不应该四舍五入到下一个整数,这样数字就是50吗?
当执行整数除法(这里我们指的是两个参数都是整型)时,CLR将截断结果;有效地四舍五入为阳性结果。
如果您想要"标准"或中点舍入,则需要显式地使用Math.Round
和浮点除法(至少有一个参数是float
, double
或decimal
)。
这不是四舍五入,而是整数运算,它会截断浮点数,所以
(100 - 1)/2 == 99/2 = 49.5,截断为49
和
(100 - 1)/-2 = 99/-2 = -49.5,截断为-49
如果你想要真正的四舍五入,那么你必须使至少一个变量为浮点值,然后对结果调用Math.Round
。
如前所述,整数除法将截断。这是有道理的,因为99 % 2 == 1
和您期望从原始值中减去模数不会改变除法结果,即(99/2 ==(99-(99%2))/2),因此99/2 = 98/2