Exercício - Formatar a saída decimal

Concluído

Neste exercício, você calculará o GPA final e modificará a saída do console para obter o formato de relatório desejado. O GPA é igual à soma do total de pontos de nota dividido pela soma do total de horas de crédito.

Calcular o GPA final

  1. No Editor .NET, localize as instruções Console.WriteLine() que são usadas para exibir as informações do curso.

  2. Remova o seguinte código do exercício anterior:

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

    Como você verificou que seus valores estão corretos, essa linha não é mais necessária.

  3. Crie uma linha de código em branco acima das instruções Console.WriteLine().

  4. Na linha de código em branco que você criou, para inicializar uma variável que armazenará o GPA final, insira o seguinte código:

    decimal gradePointAverage = totalGradePoints/totalCreditHours;
    
    
  5. Reserve um momento para considerar os tipos de dados que você está dividindo.

    Quando você deseja que o resultado de um cálculo de divisão seja um valor decimal, o dividendo ou divisor deve ser do tipo decimal (ou ambos). Ao usar variáveis inteiras no cálculo, você precisa usar o operador cast para converter temporariamente um inteiro em decimal.

  6. Para recuperar um valor decimal da divisão, atualize o código da seguinte maneira:

    decimal gradePointAverage = (decimal) totalGradePoints/totalCreditHours;
    
    
  7. Navegue até a última instrução Console.WriteLine() e crie uma nova linha de código em branco após a última instrução.

  8. Para exibir o GPA final, insira o seguinte código:

    Console.WriteLine($"Final GPA: {gradePointAverage}");
    
  9. Para visualizar os resultados, selecione Executar.

    Compare a saída do seu aplicativo com a seguinte saída:

    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
    

Formatar a saída decimal

Você deve ter notado que o resultado decimal contém muito mais dígitos do que um GPA padrão. Nesta tarefa, você manipulará o valor decimal do GPA para que apenas três dígitos sejam exibidos.

Em última análise, você deseja exibir o primeiro dígito do GPA, um ponto decimal, seguido pelos dois primeiros dígitos após o decimal. Você pode obter esse formato usando variáveis para armazenar os dígitos à esquerda e à direita, respectivamente, e imprimindo-os juntos usando Console.WriteLine(). Você pode usar as operações matemáticas que aprendeu para extrair os dígitos à esquerda e à direita.

Nota

À medida que você continua sua jornada de desenvolvedor, você descobrirá operações internas que podem aplicar automaticamente a formatação aos seus dados. Por enquanto, esta é uma ótima oportunidade para solidificar o que você aprendeu até agora.

  1. Navegue até a parte superior das instruções Console.WriteLine().

  2. Crie uma linha de código em branco acima das instruções Console.WriteLine().

  3. Na linha de código em branco que você criou, para inicializar uma variável que armazenará o dígito principal do GPA, insira o seguinte código:

    int leadingDigit = (int) gradePointAverage;
    
    

    Observe que, para extrair o dígito principal do decimal, você o está convertendo em um valor inteiro. Este é um método simples e confiável porque lançar um valor fracionário nunca irá arredondar o resultado. Ou seja, se o GPA for 2,99, converter o valor decimal para um int resultará em 2.

  4. Para inicializar uma variável que armazenará os dois primeiros dígitos após o decimal, digite o seguinte código:

    int firstDigit = (int) (gradePointAverage * 10) % 10;
    

    Na primeira metade desta operação, mova a casa decimal uma posição para a direita e converta-a em um inteiro. Na segunda metade, você usa o operador restante, ou módulo, para obter o restante da divisão por 10, que isola o último dígito no inteiro. Eis um exemplo:

    Suponhamos gradePointAverage = 2.994573 , então, que executar a operação nesses valores resultaria nas seguintes etapas:

    int firstDigit = (int) (2.994573 * 10) % 10;
    int firstDigit = 29 % 10;
    int firstDigit = 9;
    

    E o valor resultante de firstDigit é 9.

    Em seguida, você aplicará a mesma operação para recuperar o segundo dígito.

  5. Em uma nova linha de código em branco, digite o seguinte código:

    int secondDigit = (int) (gradePointAverage * 100 ) % 10;
    

    Nesta linha, você move as casas decimais duas e usa o operador modulo para recuperar o último dígito.

  6. Para corrigir a saída final do GPA, atualize a última instrução Console.WriteLine() da seguinte maneira:

    Console.WriteLine($"Final GPA: {leadingDigit}.{firstDigit}{secondDigit}");
    

Verifique o seu trabalho

Nesta tarefa, você executará o código e verificará se a saída está correta.

  1. Verifique se o seu código é semelhante ao seguinte:

    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. Para executar o código e exibir a saída formatada, selecione Executar.

  3. Para verificar se o código está funcionando conforme o esperado, compare a saída do seu aplicativo com a seguinte saída:

    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
    

    Se o código apresentar resultados diferentes, terá de rever o código para encontrar o erro e fazer atualizações. Execute o código novamente para ver se você corrigiu o problema. Continue atualizando e executando seu código até que seu código produza os resultados esperados.

Importante

Certifique-se de não excluir nenhum código que você escreveu até agora. Você desenvolverá esse código no próximo exercício.