2010-09-14 7 views
3

Comment est-ce que je peux augmenter la valeur du nombreGrade alors si c'est 89.5 il va à 90. numberGrade est pris en tant que double mais en faisant un int ne l'arrondit pas vers le haut ou vers le bas.Java Arrondir

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; 
    } 

Répondre

18

Pour arrondir jusqu'à, vous pouvez utiliser Math.ceil(numberGrade). Pour arrondir à l'entier le plus proche, utilisez Math.round(numberGrade).

Voir: the Math class

+1

Et, pour être complet, Math.floor (numberGrade) serait essentiellement lop hors de la décimale. C'est-à-dire, il arrondit toujours/vers le bas/vers l'entier le plus proche. – poundifdef

+0

veuillez utiliser BigInteger pour arrondir –

+0

@Suresh S - Je suppose que vous voulez dire BigDecimal, pas BigInteger. Pourquoi BigDecimal devrait-il être utilisé pour arrondir dans ce cas? – Jeff

2

Vous pouvez utiliser soit:

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

Ou

long longGrade = Math.round(doubleGrade); 
    int intGrade = (int)longGrade; 
0

Voulez-vous dire que vous voulez que toutes les parties décimales arrondies - 89,2 tours à 90? Si c'est le cas, utilisez Math.ceil (double val).

Si au contraire vous souhaitez arrondir au nombre le plus proche (89,2 rounds à 89, 89,6 tours à 90), vous voulez faire java.lang.StrictMath.round(float val)