Is there any Java function or util class
which does rounding this way: func(3/2) = 2
Math.ceil()
doesn't help, which by name should have done so. I am aware of BigDecimal
, but don't need it.
Is there any Java function or util class
which does rounding this way: func(3/2) = 2
Math.ceil()
doesn't help, which by name should have done so. I am aware of BigDecimal
, but don't need it.
Aint this the usual case of integer division? Try Math.Ceil after casting either number to a floating point type.
Math.ceil()
will always round up, however you are doing integer division with 3/2
. Thus, since in integer division 3/2 = 1
(not 1.5
) the ceiling of 1
is 1
.
What you would need to do to achieve the results you want is Math.ceil(3/2.0);
By doing the division by a double amount (2.0
), you end up doing floating point division instead of integer division. Thus 3/2.0 = 1.5
, and the ceil()
of 1.5
is always 2
.
Math.ceil will help, provided you use floating point numbers. The problem is that 3/2, in integer division, is 1. By the time the value gets to whatever function, be it Math.ceil or something else, the value is simply 1. Any trailing decimal portion is gone.
A bit of black magic, and you can do it all with integers:
// Divide x by n rounding up
int res = (x+n-1)/n
In Java, 3/2 = 1 because it uses integer division. There's no function that can "fix" this afterwards. What you have to do is to force a float divison and round up the result:
int result = (int)Math.ceil( ((float)3) / ((float)2) );
Many languages "think" like this. If you're dividing an int into an int, then you should get an int (so they truncate and you get 1 as a result).
We all know this is not true, but that's how they work. You can "cheat" them, and do something like casting one of them to a double, or use a double representation: Math.ceil (3.0 / 2)
or Math.ceil((double)3/2)
, as mentioned.
if (a % b == 0)
{
return (a / b);
}
else
{
return (a / b) + 1;
}
Exploits integer division to do what you want. I don't know of a math function that does this, but why not roll your own?
To convert floor division to ceiling division:
(numerator + denominator-1) / denominator
To convert floor division to rounding division:
(numerator + (denominator)/2) / denominator