切换语句;小数精度

switch statements; decimal precision

我不确定如何创建使用小数精度的 switch 语句,因为 switch 语句与双日期类型不兼容。

 double grade = input.nextDouble(); //read grade

    while (grade !=-1)
    {
        total += grade; // add grade total
        ++gradeCounter; // increment number of grades

        // increment appropriate letter-grade counter
        switch (grade / 1)
        {
            case 92.5: // grade was between 90
            case 100: // and 100, inclusive
                ++aCount;
                break; // exits Switch

是我遇到问题的代码的特定部分,但我不确定我用什么更改了开关。

它使用 Java 语言,如果需要该信息,我正在使用 Netbeans IDE。

您可以转换为 int,但请先进行乘法运算,以免丢失小数点。

double grade = 92.5;

int convertedGrade = (int) (grade * 10);

switch(convertedGrade) {

case 925: System.out.println("Grade is 92.5");
    break;

正如其他人指出的那样,switch-case 语句旨在与 discrete/enumerable 值一起使用,这使得它与 double 数据类型不兼容。如果我对这个想法的理解正确,并且您希望您的程序很好地将考试分数转换为成绩,您可以使用 enum 来定义每个成绩的最低分数:

enum Grade {

    A(92.5), B(82.5), C(72.5), D(62.5), E(52.5), F(0.0);

    private static final Grade[] GRADES = values();
    private double minPoints;

    Grade(double minPoints) {
        this.minPoints = minPoints;
    }

    public static Grade forPoints(double points) {
        for (Grade g : GRADES) {
            if (points >= g.minPoints) {
                return g;
            }
        }
        return F;
    }
}

Grade中的forPoints()方法可让您查询与考试分数相对应的成绩。

现在,要跟踪成绩数,您可以使用 EnumMap<Grade, Integer> 而不是单独的计数器变量。请注意,因为查找被编码到 enum 中,您不再需要 switch-case:

Map<Grade, Integer> gradeCounters = new EnumMap<>(Grade.class);

// initialize the counters
for(Grade g : Grade.values()) {
    gradeCounters.put(g, 0);
}

Scanner input = new Scanner(System.in);
double total = 0;
int gradeCounter = 0; 
double points = input.nextDouble(); //read exam points

while (points >= 0) {
    total += points; // add points to total
    ++gradeCounter; // increment number of grades

    // increment appropriate letter-grade counter
    Grade g = Grade.forPoints(points);
    int currentCount = gradeCounters.get(g);
    gradeCounters.put(g, currentCount + 1);

    points = input.nextDouble();
}