我似乎找不到我正在寻找的简单问题答案:如何将任何数字四舍五入到最接近的 int
?
例如,每当数字为 0.2、0.7、0.2222、0.4324、0.99999 时,我都希望结果为 1。
目前我已经有了:
int b = (int) Math.ceil(a / 100);
但是它似乎没有完成任务。
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
a
是一个 int
,它按照建议的方式工作。当执行 int/float
时,结果是一个 float
,正如输出所示。请尝试使用链接。 - dantiston我不知道你为什么要除以100,但这是我的假设:int a;
int b = (int) Math.ceil( ((double)a) / 100);
或者
int b = (int) Math.ceil( a / 100.0);
int RoundedUp = (int) Math.ceil(RandomReal);
这似乎非常完美,每次都有效。
过了10年,但那个问题仍旧困扰着我。
所以这是回答那些和我一样来得太晚的人的答案。
这行不通。
int b = (int) Math.ceil(a / 100);
由于结果a/100
是整数并且已经四舍五入,所以Math.ceil无法起作用。
你必须避免这种四舍五入操作,使用以下方法
int b = (int) Math.ceil((float) a / 100);
现在它可以工作了。
另一个选项是使用数学基础知识:
Math.ceil(p / K)
等同于 ((p-1) // K) + 1
最简单的方法就是:
如果你收到一个浮点数或双精度数,并想将其转换为最接近的向上取整,则只需执行以下操作:System.out.println((int)Math.ceil(yourfloat));
它会完美地工作。
double a = 0.99999;
int rounded_a = (int)Math.round(a);
System.out.println("a:"+rounded_a );
Output :
a:1
a
是整数类型。 - Nikita Rybak