c整数除法不返回正确的商

c integer division not returning correct quotient

我的代码(C语言)是这样的:

avg = round((r + g + b) / 3);

r = avg;
g = avg;
b = avg;

应该是做灰度图效果的。没有语法错误,但显然是 avg,当按上面显示的值 r 计算为 27,并且 gb 都为 28 时,avg 发现它是 27。我知道它是 27.66666... 四舍五入后是 28。如果你能 either-or/both 向我解释为什么 round() 会发生这种情况,and/or 给我一个解决方案,非常感谢。

假设rgb都是整数类型,表达式(r + g + b) / 3执行整数除法,因为所有操作数都是整数类型。这意味着除法的任何小数部分都会被截断。

将表达式更改为:

(r + g + b) / 3.0

常量 3.0 的类型为 double,因此这将执行浮点除法。然后四舍五入这个表达式的结果会给你想要的结果。

  1. 由于 r 之前缺少 (,您的代码将无法编译。
  2. 您没有提供原始数据类型,所以我假设 int
  3. 将总和除以 3 执行整数除法,因此 27 是正确的。
  4. 你想要的是round((r + g + b) / 3.0),它会将(r + g + b)隐式转换为double