Java向上取整任意数字

178

我似乎找不到我正在寻找的简单问题答案:如何将任何数字四舍五入到最接近的 int

例如,每当数字为 0.2、0.7、0.2222、0.4324、0.99999 时,我都希望结果为 1。

目前我已经有了:

int b = (int) Math.ceil(a / 100);

但是它似乎没有完成任务。


你的示例代码中为什么要除以100? - Jon Skeet
14
我猜你的a是整数类型。 - Nikita Rybak
请告诉我们您的输入和期望的输出。 - Chris Dennett
1
是的,你说得对,a是一个整数...谢谢你指出来。100.0解决了我的问题。 - Stevanicus
1
我猜他想要的是a/100向上取整,但是是的,这个问题需要一些澄清。 - Jay
1
请注意:在这个问题中提供了更好的答案。 - martijnn2008
7个回答

342

Math.ceil()是正确的函数调用。我猜测a是一个int,这会使得a / 100执行整数运算。尝试使用Math.ceil(a / 100.0)代替。

int a = 142;
System.out.println(a / 100);
System.out.println(Math.ceil(a / 100));
System.out.println(a / 100.0);
System.out.println(Math.ceil(a / 100.0));
System.out.println((int) Math.ceil(a / 100.0));

输出:

1
1.0
1.42
2.0
2

请参考 http://ideone.com/yhT0l


5
仅当"a"为双倍时才成立。 - L.Grillo
1
"a" 需要是一个 double 类型或者转换成 double 类型。 - Codeversed
1
在这个例子中,a 是一个 int,它按照建议的方式工作。当执行 int/float 时,结果是一个 float,正如输出所示。请尝试使用链接。 - dantiston

22

我不知道你为什么要除以100,但这是我的假设:int a;

int b = (int) Math.ceil( ((double)a) / 100);

或者

int b = (int) Math.ceil( a / 100.0);

13
int RoundedUp = (int) Math.ceil(RandomReal);

这似乎非常完美,每次都有效。


12

过了10年,但那个问题仍旧困扰着我。

所以这是回答那些和我一样来得太晚的人的答案。

这行不通。

int b = (int) Math.ceil(a / 100);

由于结果a/100是整数并且已经四舍五入,所以Math.ceil无法起作用。

你必须避免这种四舍五入操作,使用以下方法

int b = (int) Math.ceil((float) a / 100);

现在它可以工作了。


2

另一个选项是使用数学基础知识:

Math.ceil(p / K) 等同于 ((p-1) // K) + 1


0

最简单的方法就是:

如果你收到一个浮点数或双精度数,并想将其转换为最接近的向上取整,则只需执行以下操作:System.out.println((int)Math.ceil(yourfloat)); 它会完美地工作。


-2
假设a为double类型,我们需要一个没有小数位的四舍五入数字。使用Math.round()函数。
这是我的解决方案。
double a = 0.99999;
int rounded_a = (int)Math.round(a);
System.out.println("a:"+rounded_a );

Output : 
a:1

1
这是错误的答案,因为在此要求向上舍入。如果a=0.2,则结果将为1。 - Mohamed23gharbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接