为什么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吗?

为什么c#将(100-1)/2四舍五入而不是50 ?

当执行整数除法(这里我们指的是两个参数都是整型)时,CLR将截断结果;有效地四舍五入为阳性结果。

如果您想要"标准"或中点舍入,则需要显式地使用Math.Round和浮点除法(至少有一个参数是float, doubledecimal)。

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

(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