views:

67

answers:

3
+1  Q: 

Java Rounding Up

How can I rould the value of the numberGrade up so if it is 89.5 it goes to 90. numberGrade is taken in as a double but making it a int does not round it up or down.

public class GradeReporter
{
    // The limit is the inclusive lower limit for each letter
    // grade -- this means that 89.5 is an 'A' not a 'B'
    public static final double A_LIMIT = 90;
    public static final double B_LIMIT = 80;
    public static final double C_LIMIT = 70;
    public static final double D_LIMIT = 60;
    public static final double F_LIMIT = 60;

    /** Converts a numeric grade into a letter grade. Grades should be rounded to 
     *  nearest whole number
     *
     * @param a numeric grade in the range of 0 to 100
     * @returns a letter grade based on the numeric grade, possible grades are A, B, C, D and F.
     */
    public char letterGrade(double numberGrade)
    {
        int grade = int(numberGrade);
        if (grade >= A_LIMIT)
            letterGrade = 'A';
        else if (grade >= B_LIMIT)
            letterGrade = 'B';
        else if (grade >= C_LIMIT)
            letterGrade = 'C';
        else if (grade >= D_LIMIT)
            letterGrade = 'D';
        else if (grade < F_LIMIT)//4
            letterGrade = 'F';
        return letterGrade;
    }
+4  A: 

To round up, you can use Math.ceil(numberGrade). To round to the nearest integer, use Math.round(numberGrade).

See: the Math class

Jeff
And, for completeness, Math.floor(numberGrade) would basically lop off the decimal. That is, it always rounds /down/ to the closest integer.
rascher
please use BigInteger for rounding
Suresh S
@Suresh S - I assume you mean BigDecimal, not BigInteger. Why should BigDecimal be used for rounding in this case?
Jeff
@Jeff yes sorry BigDecimal. You can use this to approximate the decimal values. like converting from pennies to dollar.
Suresh S
+1  A: 

You could use either:

    int intGrade = (int)(doubleGrade + 0.5);

Or

    long longGrade = Math.round(doubleGrade);
    int  intGrade  = (int)longGrade;
spong
A: 

Are you saying you want all decimal parts rounded up - 89.2 rounds to 90? If that's the case, use Math.ceil(double val).

If instead you want to round to the nearest number (89.2 rounds to 89, 89.6 rounds to 90), you'd want to do java.lang.StrictMath.round(float val)

I82Much