将浮点数舍入为java中的下一个整数值

S.K*_*S.K 45 java floating-point integer rounding

如何将浮点数舍入到Java中的下一个整数值?假设

2.1 - > 3

3.001 - > 4

4.5 - > 5

7.9 - > 8

Ste*_*ven 39

你应该看一下java的数学包中的上限:Math.ceil


编辑:添加了Math.ceil的javadoc.可能值得阅读数学中的所有方法.

http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#ceil%28double%29

public static double ceil(double a)

返回大于或等于参数且等于数学整数的最小(最接近负无穷大)double值.特别案例:

  • 如果参数值已经等于数学整数,则结果与参数相同.
  • 如果参数为NaN或无穷大或正零或负零,则结果与参数相同.
  • 如果参数值小于零但大于-1.0,则结果为负零.

请注意,值Math.ceil(x)恰好是值 -Math.floor(-x).

  • Math.ceil(2.1)将产生3. (5认同)
  • Math.ceil(3.4)仅给出值3.我希望价值为4.我怎么能这样做? (4认同)
  • 由于Math.ceil返回一个双精度数并且您要求一个整数,您应该首先将其转换为Double,然后获取其整数值:new Double(Math.ceil(3.4))。intValue()甚至是((int)Math.ceil(3.4)` (2认同)

小智 21

试试这个

float a = 4.5f;

int d = (int) Math.ceil(a);

System.out.println(d);
Run Code Online (Sandbox Code Playgroud)


Jef*_*nes 9

我有同样的问题,我仍然得到较小的int值.这是师,而不是Math.ceil.你必须在int中添加一个(浮点)强制转换.这就是我修复它的方法:

int totalNumberOfCachedData = 201;
int DataCountMax = 200;

float ceil =(float) totalNumberOfCachedData / (float)DataCountMax;
int roundInt = (int) Math.ceil(ceil);
Run Code Online (Sandbox Code Playgroud)

这将给我2 roundInt的值.


Lio*_*ion 7

看到

float a=10.34f,b=45.678f;

System.out.println((int)Math.ceil(a));
System.out.println((int)Math.ceil(b));
Run Code Online (Sandbox Code Playgroud)

产量

11
46
Run Code Online (Sandbox Code Playgroud)

  • @GaneshP:这是因为'5`和`2`都被认为是整数.因此,整数运算起作用.像你说的那样潜水,`Math.ceil(5/2)`会得到一个整数结果,它是'2'(整数不能容纳一个小数部分),因此`2`作为参数传递给`cell()`然后产生"2"的方法 - "2"的上限是"2.0".如果您反而将其中一个或两个都设置为"float"或"double",那么您确实会看到`3.0`,例如`Math.ceil(5/2D)`,`Math.ceil(5D/2D) `,`Math.ceil(5/2F)`,`Math.ceil(5F/2F)`或甚至`Math.ceil(5.0/2.0)`等. (8认同)