0

メインクラスにこのコードがあります。私の問題は、合計をクラスで割ってGPAを計算する場合です。それは私に完全な数を与えません。EX 合計が 14 でクラスが 4 の場合は 3.5 ですが、私のコードでは 3.0 しか返されません。誰かが理由を知っていますか、私はあなたの助けに大いに感謝します!

Scanner input = new Scanner(System.in);
    System.out.print("How many classes did you have?: ");
    int classes = input.nextInt();
    String grades = "";
    int total = 0;
    int dec;



    for (int j = 0; j < classes; j++) {

        Scanner inputters = new Scanner(System.in);
        System.out.print("What is your Grade?: ");
        grades = inputters.nextLine();


        if (grades.equals("A")){
        dec = 4; 
        total += dec;

    } else if (grades.equals("B")){
        dec = 3;
        total += dec;

    } else if (grades.equals("C")){
        dec = 2;
        total += dec;

    } else if (grades.equals("D")){
        dec = 1;
        total += dec;

    } else if (grades.equals("F")){
        dec = 0;
        total += dec;

    }

    }


    double GPA = total / classes;
    System.out.println(GPA);

    DecimalFormat formatter = new DecimalFormat("0.##");
    System.out.println( formatter.format(GPA));
4

1 に答える 1

1

これは、int を int で除算しているためであり、浮動小数点数になることはありません。total / classes のタイプを double (またはキャスト) に変更すると、GPA は期待どおりの数値になります。

PS: 0.9 + 0.1 != 1.0 のように double が正確ではないというわけではありません。「適切な」倍精度計算を行いたい場合は、BigDecimal を使用し、使用時には String コンストラクターを使用します。

于 2013-09-12T07:34:52.443 に答える