是否有更优雅的方法来计算x =(y/n)+(y%n?1:0)?

gri*_*eve 6 language-agnostic math

编程时,我经常发现自己需要计算如下内容:

x = (y / n) + (y % n ? 1 : 0);

或者更明确地说:

x = y / n;
if (y % n != 0) {
   x = x + 1;
}
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式来实现这一价值?可以在不使用条件表达式的情况下实现吗?

Seb*_*olm 14

因此,您希望整数除法向上舍入而不是向下舍入.你可以通过添加n-1到分子来伪造这个:

x = (y + n - 1) / n;
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以将值向下舍入到足以为您提供所需结果的值.

  • 如果`n`或`y`很大,请注意可能的溢出/包装问题. (2认同)