是否有任何Java函数或util类以这种方式舍入:func(3/2)= 2?

Rig*_*eda 17 java rounding ceil

是否存在以class这种方式舍入的Java函数或util :func(3/2) = 2

Math.ceil()没有帮助,按名称应该这样做.我知道BigDecimal,但不需要它.

jjn*_*guy 52

Math.ceil()将永远四舍五入,但你正在进行整数除法3/2.因此,因为在整数除3/2 = 1(不1.5)的上限11.

你需要做些什么才能达到你想要的效果 Math.ceil(3/2.0);

通过双倍量(2.0)进行除法,最终会进行浮点除法而不是整数除法.因此3/2.0 = 1.5,和ceil()1.5永远是2.


Tal*_*man 42

有点黑魔法,你可以用整数做到这一切:

// Divide x by n rounding up
int res = (x+n-1)/n
Run Code Online (Sandbox Code Playgroud)

  • 假设x是正数! (11认同)
  • @Mat另一方面,任何阅读代码的人都会发现很难弄清楚你在做什么以及为什么.对于这样做,这是一个比你列出的任何一个更强大的论据.但是你可以将它提取到一个正确命名的方法然后它没关系. (4认同)

Ran*_*tor 12

将楼层划分转换为上限划分:

(numerator + denominator-1) / denominator
Run Code Online (Sandbox Code Playgroud)

将楼层划分转换为舍入划分:

(numerator + (denominator)/2) / denominator
Run Code Online (Sandbox Code Playgroud)

  • 首先也相当于:`ceil(n/d)= fl((n - 1)/ d)+ 1` (2认同)

Pat*_*and 11

你总是可以先施展:

Math.ceil((double)3/2)
Run Code Online (Sandbox Code Playgroud)


Mic*_*rdt 5

在Java中,3/2 = 1,因为它使用整数除法.之后没有任何功能可以"修复"此功能.你要做的是强制浮动divison并将结果四舍五入:

int result = (int)Math.ceil( ((float)3) / ((float)2) );
Run Code Online (Sandbox Code Playgroud)