转换语句;小数精度

时间:2015-10-18 22:33:27

标签: java switch-statement 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。

2 个答案:

答案 0 :(得分:0)

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

double grade = 92.5;

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

switch(convertedGrade) {

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

答案 1 :(得分:0)

正如其他人所指出的,switch-case语句旨在与离散/可枚举值一起使用,这使得它与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;
    }
}

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

现在,为了跟踪成绩的数量,您可以使用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();
}