練習 - 格式化小數輸出
在此練習中,您將計算最終 GPA 並修改主控台輸出,以達到所需的報告格式。 GPA 等於總成績點分數的總和除以總學分時數的總和。
計算最終 GPA
在 .NET 編輯器中,找出用來顯示課程資訊的 Console.WriteLine() 陳述式。
從上一個練習中移除下列程式碼:
Console.WriteLine($"{totalGradePoints} {totalCreditHours}");
由於您已確認您的值是正確的,因此不再需要這一行。
在 Console.WriteLine() 陳述式上方建立空白的程式碼行。
在您建立的空白程式碼行上,若要初始化將儲存最終 GPA 的變數,請輸入下列程式碼:
decimal gradePointAverage = totalGradePoints/totalCreditHours;
請花點時間考慮您要分割的資料類型。
當您希望除法計算的結果為小數值時,除數或被除數的類型必須是小數 (或兩者)。 當您在計算中使用整數變數時,必須使用轉換運算子暫時將整數轉換成小數。
若要從除法中擷取小數值,請更新您的程式碼,如下所示:
decimal gradePointAverage = (decimal) totalGradePoints/totalCreditHours;
巡覽至最後一個 Console.WriteLine() 陳述式,並在最後一個陳述式之後建立新的空白程式碼行。
若要顯示最終 GPA,請輸入下列程式碼:
Console.WriteLine($"Final GPA: {gradePointAverage}");
若要檢視結果,請選取 [執行]。
比較應用程式的輸出與下列輸出:
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() 一起列印它們,以達成此格式。 您可以使用您所學到的數學運算來擷取前置和後置位數。
注意
當您繼續開發人員旅程時,您將探索可自動將格式設定套用至資料的內建作業。 目前,這是一個很好的機會,可強化您到目前為止學到的內容。
巡覽至 Console.WriteLine() 陳述式的頂端。
在 Console.WriteLine() 陳述式上方建立空白的程式碼行。
在您建立的空白程式碼行上,若要初始化將儲存 GPA 前置位數的變數,請輸入下列程式碼:
int leadingDigit = (int) gradePointAverage;
請注意,若要從小數擷取前置位數,您要將其轉換成整數值。 這是簡單且可靠的方法,因為轉換分數值永遠不會將結果進位。 這表示如果 GPA 為 2.99,將小數值轉換成 int 將會產生 2。
若要初始化將儲存小數點之後前兩位數的變數,請輸入下列程式碼:
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。接下來,您將套用相同的作業來擷取第二個數位。
在新的空白程式碼上,輸入下列程式碼:
int secondDigit = (int) (gradePointAverage * 100 ) % 10;
在此行中,您會將小數位移動兩位數,並使用模數運算子來擷取最後一個數位。
若要更正最終 GPA 輸出,請更新最後一個 Console.WriteLine() 陳述式,如下所示:
Console.WriteLine($"Final GPA: {leadingDigit}.{firstDigit}{secondDigit}");
檢查您的工作
在此工作中,您將執行程式碼,並驗證輸出是否正確。
檢查您的程式碼是否類似下列內容:
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}");
若要執行程式碼並顯示格式化的輸出,請選取 [執行]。
若要確認您的程式碼如預期般運作,請比較應用程式的輸出與下列輸出:
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
如果您的程式碼顯示不同的結果,您必須檢閱程式碼以尋找錯誤並進行更新。 再次執行程式碼,查看您是否已修正此問題。 請繼續更新和執行程式碼,直到其產生預期的結果為止。
重要
切記勿刪除您到目前為止撰寫的任何程式碼。 在下一個練習中,您將以此程式碼為基礎進行構建。