练习 - 设置十进制输出的格式
在本练习中,你将计算最终 GPA 并修改控制台输出,以得到所需的报告格式。 GPA 等于总绩点除以总学分。
计算最终 GPA
在 .NET 编辑器中,找到用于显示课程信息的 Console.WriteLine() 语句。
删除上一练习中的以下代码:
Console.WriteLine($"{totalGradePoints} {totalCreditHours}");
由于已确认值是正确的,因此不再需要此行。
在 Console.WriteLine() 语句上方创建空白代码行。
在创建的空白代码行上,若要初始化将存储最终 GPA 的变量,请输入以下代码:
decimal gradePointAverage = totalGradePoints/totalCreditHours;
花点时间思考要划分的数据类型。
如果希望除法计算的结果为十进制值,则被除数或除数必须是 Decimal 类型(或两者都是)。 在计算中使用 Integer 变量时,需要使用强制转换运算符暂时将整数转换为小数。
若要从除法中检索小数值,请按如下方式更新代码:
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,则将小数值强制转换为整数会得到 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
如果代码显示不同的结果,则需要查看代码以查找错误并进行更新。 再次运行代码以查看是否已解决问题。 继续更新和运行代码,直到代码生成预期结果。
重要
确保不要删除到目前为止已编写的任何代码。 在下一个练习中,你将基于此代码进行生成。