練習 - 格式化小數輸出

已完成

在此練習中,您將計算最終 GPA 並修改主控台輸出,以達到所需的報告格式。 GPA 等於總成績點分數的總和除以總學分時數的總和。

計算最終 GPA

  1. 在 .NET 編輯器中,找出用來顯示課程資訊的 Console.WriteLine() 陳述式。

  2. 從上一個練習中移除下列程式碼:

    Console.WriteLine($"{totalGradePoints} {totalCreditHours}");
    

    由於您已確認您的值是正確的,因此不再需要這一行。

  3. 在 Console.WriteLine() 陳述式上方建立空白的程式碼行。

  4. 在您建立的空白程式碼行上,若要初始化將儲存最終 GPA 的變數,請輸入下列程式碼:

    decimal gradePointAverage = totalGradePoints/totalCreditHours;
    
    
  5. 請花點時間考慮您要分割的資料類型。

    當您希望除法計算的結果為小數值時,除數或被除數的類型必須是小數 (或兩者)。 當您在計算中使用整數變數時,必須使用轉換運算子暫時將整數轉換成小數。

  6. 若要從除法中擷取小數值,請更新您的程式碼,如下所示:

    decimal gradePointAverage = (decimal) totalGradePoints/totalCreditHours;
    
    
  7. 巡覽至最後一個 Console.WriteLine() 陳述式,並在最後一個陳述式之後建立新的空白程式碼行。

  8. 若要顯示最終 GPA,請輸入下列程式碼:

    Console.WriteLine($"Final GPA: {gradePointAverage}");
    
  9. 若要檢視結果,請選取 [執行]。

    比較應用程式的輸出與下列輸出:

    English 101 4 3
    Algebra 101 3 3
    Biology 101 3 4
    Computer Science I 3 4
    Psychology 101 4 3
    Final GPA: 3.3529411764705882352941176471
    

格式化小數輸出

您可能已注意到小數結果包含比標準 GPA 還多的位數。 在此工作中,您將操作十進位 GPA 值,以便只顯示三位數。

最終,您想要顯示 GPA 的第一位數 (小數點),後面接著小數點後的前兩位數。 您可以使用變數分別儲存前置和後置位數,然後使用 Console.WriteLine() 一起列印它們,以達成此格式。 您可以使用您所學到的數學運算來擷取前置和後置位數。

注意

當您繼續開發人員旅程時,您將探索可自動將格式設定套用至資料的內建作業。 目前,這是一個很好的機會,可強化您到目前為止學到的內容。

  1. 巡覽至 Console.WriteLine() 陳述式的頂端。

  2. 在 Console.WriteLine() 陳述式上方建立空白的程式碼行。

  3. 在您建立的空白程式碼行上,若要初始化將儲存 GPA 前置位數的變數,請輸入下列程式碼:

    int leadingDigit = (int) gradePointAverage;
    
    

    請注意,若要從小數擷取前置位數,您要將其轉換成整數值。 這是簡單且可靠的方法,因為轉換分數值永遠不會將結果進位。 這表示如果 GPA 為 2.99,將小數值轉換成 int 將會產生 2。

  4. 若要初始化將儲存小數點之後前兩位數的變數,請輸入下列程式碼:

    int firstDigit = (int) (gradePointAverage * 10) % 10;
    

    在此作業的上半部,您會將小數位數移到右邊,並將它轉換成整數。 在下半部,您會使用餘數或模數運算子來取得除法 10 的餘數,這會隔離整數中的最後一位數。 以下是範例:

    假設 gradePointAverage = 2.994573 然後,對這些值執行作業會導致下列步驟:

    int firstDigit = (int) (2.994573 * 10) % 10;
    int firstDigit = 29 % 10;
    int firstDigit = 9;
    

    產生的 firstDigit 值為 9。

    接下來,您將套用相同的作業來擷取第二個數位。

  5. 在新的空白程式碼上,輸入下列程式碼:

    int secondDigit = (int) (gradePointAverage * 100 ) % 10;
    

    在此行中,您會將小數位移動兩位數,並使用模數運算子來擷取最後一個數位。

  6. 若要更正最終 GPA 輸出,請更新最後一個 Console.WriteLine() 陳述式,如下所示:

    Console.WriteLine($"Final GPA: {leadingDigit}.{firstDigit}{secondDigit}");
    

檢查您的工作

在此工作中,您將執行程式碼,並驗證輸出是否正確。

  1. 檢查您的程式碼是否類似下列內容:

    string studentName = "Sophia Johnson";
    string course1Name = "English 101";
    string course2Name = "Algebra 101";
    string course3Name = "Biology 101";
    string course4Name = "Computer Science I";
    string course5Name = "Psychology 101";
    
    int course1Credit = 3;
    int course2Credit = 3;
    int course3Credit = 4;
    int course4Credit = 4;
    int course5Credit = 3;
    
    int gradeA = 4;
    int gradeB = 3;
    
    int course1Grade = gradeA;
    int course2Grade = gradeB;
    int course3Grade = gradeB;
    int course4Grade = gradeB;
    int course5Grade = gradeA;
    
    int totalCreditHours = 0;
    totalCreditHours += course1Credit;
    totalCreditHours += course2Credit;
    totalCreditHours += course3Credit;
    totalCreditHours += course4Credit;
    totalCreditHours += course5Credit;
    
    int totalGradePoints = 0;
    totalGradePoints += course1Credit * course1Grade;
    totalGradePoints += course2Credit * course2Grade;
    totalGradePoints += course3Credit * course3Grade;
    totalGradePoints += course4Credit * course4Grade;
    totalGradePoints += course5Credit * course5Grade;
    
    decimal gradePointAverage = (decimal) totalGradePoints/totalCreditHours;
    
    int leadingDigit = (int) gradePointAverage;
    int firstDigit = (int) (gradePointAverage * 10 ) % 10;
    int secondDigit = (int) (gradePointAverage * 100 ) % 10;
    
    Console.WriteLine($"{course1Name} {course1Grade} {course1Credit}");
    Console.WriteLine($"{course2Name} {course2Grade} {course2Credit}");
    Console.WriteLine($"{course3Name} {course3Grade} {course3Credit}");
    Console.WriteLine($"{course4Name} {course4Grade} {course4Credit}");
    Console.WriteLine($"{course5Name} {course5Grade} {course5Credit}");
    
    Console.WriteLine($"Final GPA: {leadingDigit}.{firstDigit}{secondDigit}");
    
  2. 若要執行程式碼並顯示格式化的輸出,請選取 [執行]。

  3. 若要確認您的程式碼如預期般運作,請比較應用程式的輸出與下列輸出:

    English 101 4 3
    Algebra 101 3 3
    Biology 101 3 4
    Computer Science I 3 4
    Psychology 101 4 3
    Final GPA: 3.35
    

    如果您的程式碼顯示不同的結果,您必須檢閱程式碼以尋找錯誤並進行更新。 再次執行程式碼,查看您是否已修正此問題。 請繼續更新和執行程式碼,直到其產生預期的結果為止。

重要

切記勿刪除您到目前為止撰寫的任何程式碼。 在下一個練習中,您將以此程式碼為基礎進行構建。