2010-09-14 142 views
3

如何将numberGrade的值向上调整,如果它是89.5则调至90. numberGrade是以double形式提取的,但是使其成为int不会使其向上或向下四舍五入。Java四舍五入

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

回答

18

为了圆,您可以使用Math.ceil(numberGrade)。要舍入到最接近的整数,请使用Math.round(numberGrade)

参见:the Math class

+1

而且,对于完整性,Math.floor(numberGrade)将基本垂耳关小数。也就是说,它总是向上/向下/到最接近的整数。 – poundifdef 2010-09-14 02:33:50

+0

请使用BigInteger四舍五入 – 2010-09-14 09:09:32

+0

@Suresh S - 我假设你的意思是BigDecimal,而不是BigInteger。为什么在这种情况下BigDecimal应该用于四舍五入? – Jeff 2010-09-14 12:26:58

2

您可以使用两种:

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

或者

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

你说你希望所有的小数部分四舍五入 - 89.2回合90?如果是这种情况,请使用Math.ceil(double val)。

相反,如果你想四舍五入到最接近的数字(89.2回合89,89.6回合90),你会想做java.lang.StrictMath.round(float val)