四舍五入整数除法(而不是截断)

我很想知道如何将数字四舍五入到最接近的整数。例如,如果我有:


int a = 59 / 4;

如果以浮点数计算,则为14.75;如何将结果存储为“ a”中的15?


墨色风雨
浏览 969回答 3
3回答

阿波罗的战车

int a = 59.0f / 4.0f + 0.5f;这仅在分配给int时有效,因为它会丢弃'。'之后的任何内容。编辑: 此解决方案将仅在最简单的情况下工作。一个更强大的解决方案是:unsigned int round_closest(unsigned int dividend, unsigned int divisor){    return (dividend + (divisor / 2)) / divisor;}

慕村225694

整数舍入的标准习惯用法是:int a = (59 + (4 - 1)) / 4;您将除数减一加到除数中。

白猪掌柜的

适用于任何除数和除数符号的代码:int divRoundClosest(const int n, const int d){&nbsp; return ((n < 0) ^ (d < 0)) ? ((n - d/2)/d) : ((n + d/2)/d);}如果您更喜欢宏:#define DIV_ROUND_CLOSEST(n, d) ((((n) < 0) ^ ((d) < 0)) ? (((n) - (d)/2)/(d)) : (((n) + (d)/2)/(d)))linux内核宏DIV_ROUND_CLOSEST对负除数不起作用!
打开App,查看更多内容
随时随地看视频慕课网APP