I want to round this double:
3.499999999999999
to:
3.50
And I already used these two methods:
DecimalFormat df = new DecimalFormat("0.00");
double result = Double.valueOf(df.format(input));
System.out.println(answer);
and
public double round(double input)
{
int decimalPlace = 2;
BigDecimal bd = new BigDecimal(input);
bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);
return (bd.doubleValue());
}
But It keeps printing:
3.5
Does anyone have a solution for this? Because I really think that this should work. Thanks for your help.
Your first solution is really, really close. Just do this:
The reason your version doesn't work is that you're taking the
input
double, formatting it as aString
with 2dp, but then converting it back to adouble
.System.out.println
is then printing thedouble
as it always would, with no special decimal-place rules.You can use Precision class of apache commons-math
Did you try replacing the
0
's with#
's?DecimalFormat df = new DecimalFormat("#.##"); System.out.println(df.format(input));
According to here the
#
will be resolved to 0 if the digit is absentYou can use the printf formatting which may be simpler.
prints