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