Упражнение. Форматирование десятичных выходных данных
В этом упражнении вы вычислите окончательный 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
Если код отображает различные результаты, необходимо просмотреть код, чтобы найти ошибку и внести обновления. Запустите код еще раз, чтобы узнать, устранена ли проблема. Продолжайте обновлять и запускать код, пока код не выдает ожидаемые результаты.
Внимание
Не забудьте удалить любой код, который вы написали до сих пор. Этот код будет построен в следующем упражнении.