为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

墨色风雨 2019-11-28 10:46:19
我很想知道如何将数字四舍五入到最接近的整数。例如,如果我有:int a = 59 / 4;如果以浮点数计算,则为14.75;如何将结果存储为“ a”中的15?
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

int a = 59.0f / 4.0f + 0.5f;

这仅在分配给int时有效,因为它会丢弃'。'之后的任何内容。


编辑: 此解决方案将仅在最简单的情况下工作。一个更强大的解决方案是:


unsigned int round_closest(unsigned int dividend, unsigned int divisor)

{

    return (dividend + (divisor / 2)) / divisor;

}


查看完整回答
反对 回复 2019-11-28
?
慕村225694

TA贡献1880条经验 获得超4个赞

整数舍入的标准习惯用法是:


int a = (59 + (4 - 1)) / 4;

您将除数减一加到除数中。


查看完整回答
反对 回复 2019-11-28
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

适用于任何除数和除数符号的代码:


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内核宏DIV_ROUND_CLOSEST对负除数不起作用!


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 1036 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信