Java向上取整

3

如何将numberGrade的值四舍五入,使得89.5变为90。numberGrade是以double类型输入的,但转换成int类型无法进行四舍五入。

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;
    }
3个回答

18

为了将数字上取整,您可以使用 Math.ceil(numberGrade)。为了四舍五入到最近的整数,请使用 Math.round(numberGrade)

参考文献:the Math


1
为了完整起见,Math.floor(numberGrade)基本上会截去小数部分。也就是说,它总是向下舍入到最接近的整数。 - poundifdef
请使用 BigInteger 进行四舍五入。 - Dead Programmer
@Suresh S - 我想你的意思是BigDecimal,而不是BigInteger。为什么在这种情况下应该使用BigDecimal来进行舍入? - Jeff
抱歉,可以使用BigDecimal来近似表示十进制值,例如将从便士转换为美元。 - Dead Programmer

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)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接