练习 - 设置十进制输出的格式

已完成

在本练习中,你将计算最终 GPA 并修改控制台输出,以得到所需的报告格式。 GPA 等于总绩点除以总学分。

计算最终 GPA

  1. 在 .NET 编辑器中,找到用于显示课程信息的 Console.WriteLine() 语句。

  2. 删除上一练习中的以下代码:

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

    由于已确认值是正确的,因此不再需要此行。

  3. 在 Console.WriteLine() 语句上方创建空白代码行。

  4. 在创建的空白代码行上,若要初始化将存储最终 GPA 的变量,请输入以下代码:

    decimal gradePointAverage = totalGradePoints/totalCreditHours;
    
    
  5. 花点时间思考要划分的数据类型。

    如果希望除法计算的结果为十进制值,则被除数或除数必须是 Decimal 类型(或两者都是)。 在计算中使用 Integer 变量时,需要使用强制转换运算符暂时将整数转换为小数。

  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,则将小数值强制转换为整数会得到 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
    

    如果代码显示不同的结果,则需要查看代码以查找错误并进行更新。 再次运行代码以查看是否已解决问题。 继续更新和运行代码,直到代码生成预期结果。

重要

确保不要删除到目前为止已编写的任何代码。 在下一个练习中,你将基于此代码进行生成。