Reputation:
I need to round to nearest 0.5 if possible.
10.4999 = 10.5
Here is quick code:
import java.text.DecimalFormat;
import java.math.RoundingMode;
public class DecimalFormat
{
public static void main(String[] args)
{
DecimalFormat dFormat = new DecimalFormat("#.0");
dFormat.setRoundingMode(RoundingMode.HALF_EVEN);
final double test = 10.4999;
System.out.println("Format: " + dFormat.format(test));
}
}
This doesn't work because 6.10000... rounds to 6.1 etc...need it to round to 6.0
Thanks for any feedback.
Upvotes: 5
Views: 8103
Reputation: 5533
public class DecimalFormat
{
public static void main(String[] args)
{
double test = 10.4999;
double round;
int i = (int) test;
double fraction = test - i;
if (fraction < 0.25) {
round = (double) i;
} else if (fraction < 0.75) {
round = (double) (i + 0.5);
} else {
round = (double) (i + 1);
}
System.out.println("Format: " + round);
}
}
Upvotes: 0
Reputation: 11984
A more general solution to @RobWatt's answer in case you ever want to round to something else:
private static double roundTo(double v, double r) {
return Math.round(v / r) * r;
}
System.out.println(roundTo(6.1, 0.5)); // 6.0
System.out.println(roundTo(10.4999, 0.5)); // 10.5
System.out.println(roundTo(1.33, 0.25)); // 1.25
System.out.println(roundTo(1.44, 0.125)); // 1.5
Upvotes: 8
Reputation: 7146
Rather than try rounding to the nearest 0.5, double it, round to the nearest int, then divide by two.
This way, 2.49 becomes 4.98, rounds to 5, becomes 2.5.
2.24 becomes 4.48, rounds to 4, becomes 2.
Upvotes: 12