C 划分不正确

per*_*man -1 c math math.h

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

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

r = avg;
g = avg;
b = avg;
Run Code Online (Sandbox Code Playgroud)

它应该做灰度图像效果。没有语法错误,但显然是 avg,当如上所示r以 27gb28 的值计算时,avg 发现它是 27。我知道它是 27.66666 ......当四舍五入时是 28。如果你可以向我解释为什么会发生这种情况round(),和/或给我一个解决方案,真的很感激。

dbu*_*ush 7

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

将表达式更改为:

(r + g + b) / 3.0
Run Code Online (Sandbox Code Playgroud)

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