3 回答

TA貢獻1862條經(jīng)驗 獲得超6個贊
int a = 59.0f / 4.0f + 0.5f;
這僅在分配給int時有效,因為它會丟棄'。'之后的任何內(nèi)容。
編輯: 此解決方案將僅在最簡單的情況下工作。一個更強大的解決方案是:
unsigned int round_closest(unsigned int dividend, unsigned int divisor)
{
return (dividend + (divisor / 2)) / divisor;
}

TA貢獻1880條經(jīng)驗 獲得超4個贊
整數(shù)舍入的標準習慣用法是:
int a = (59 + (4 - 1)) / 4;
您將除數(shù)減一加到除數(shù)中。

TA貢獻1893條經(jīng)驗 獲得超10個贊
適用于任何除數(shù)和除數(shù)符號的代碼:
int divRoundClosest(const int n, const int d)
{
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內(nèi)核宏DIV_ROUND_CLOSEST對負除數(shù)不起作用!
- 3 回答
- 0 關(guān)注
- 1137 瀏覽
添加回答
舉報