Exercício – Formatar a saída decimal
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 divididos pela soma do total de horas de crédito.
Calcular o GPA final
No Editor do .NET, localize as instruções Console.WriteLine() usadas para exibir as informações do curso.
Remova o seguinte código do exercício anterior:
Console.WriteLine($"{totalGradePoints} {totalCreditHours}");
Como você já verificou que seus valores estão corretos, essa linha não é mais necessária.
Crie uma linha de código em branco acima das instruções Console.WriteLine().
Na linha de código em branco que você criou, insira o seguinte código para inicializar uma variável que armazenará o GPA final:
decimal gradePointAverage = totalGradePoints/totalCreditHours;
Reserve um momento para pensar sobre 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 o divisor (ou ambos) deve ser do tipo decimal. Se usar variáveis interger no cálculo, será necessário usar o operador de conversão para converter temporariamente o inteiro em decimal.
Para obter um valor decimal na divisão, atualize seu código da seguinte maneira:
decimal gradePointAverage = (decimal) totalGradePoints/totalCreditHours;
Navegue até a última instrução Console.WriteLine() e crie uma linha de código em branco após a última instrução.
Para exibir o GPA final, insira o seguinte código:
Console.WriteLine($"Final GPA: {gradePointAverage}");
Para ver 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 de GPA decimal para que apenas três dígitos sejam exibidos.
Por fim, você deseja exibir o primeiro dígito do GPA, o separador decimal, seguido pelos dois primeiros dígitos após o separador decimal. Você pode obter esse formato usando variáveis para armazenar os dígitos à esquerda e à direita, respectivamente, e imprimi-los juntos usando Console.WriteLine(). Você pode usar as operações matemáticas que aprendeu para extrair os dígitos à esquerda e à direita.
Observação
Ao continuar sua jornada de desenvolvedor, você descobrirá operações internas que podem aplicar automaticamente a formatação aos seus dados. Por enquanto, esta é uma grande oportunidade para solidificar o que você aprendeu até agora.
Navegue até a parte superior das instruções Console.WriteLine().
Crie uma linha de código em branco acima das instruções Console.WriteLine().
Na linha de código em branco que você criou, insira o seguinte código para inicializar uma variável que armazenará o dígito inicial do GPA:
int leadingDigit = (int) gradePointAverage;
Observe que, para extrair o dígito à esquerda do decimal, você o está convertendo em um valor inteiro. Esse é um método simples e confiável porque a conversão de um valor fracionário nunca arredondará o resultado. Ou seja, se o GPA for 2,99, converter o valor decimal para int resultará em 2.
Para inicializar uma variável que armazenará os dois primeiros dígitos após o separador decimal, insira o seguinte código:
int firstDigit = (int) (gradePointAverage * 10) % 10;
Na primeira metade desta operação, você move o decimal uma posição para a direita e converte-o em um inteiro. No segundo semestre, você usa o operador restante, ou módulo, para obter o restante da divisão por 10, o que isola o último dígito no inteiro. Veja um exemplo:
Suponha que
gradePointAverage = 2.994573
; em seguida, 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.
Em uma nova linha de código em branco, insira o seguinte código:
int secondDigit = (int) (gradePointAverage * 100 ) % 10;
Nessa linha, você move as duas casas decimais e usa o operador de módulo para recuperar o último dígito.
Para corrigir a saída do GPA final, atualize a última instrução Console.WriteLine() da seguinte maneira:
Console.WriteLine($"Final GPA: {leadingDigit}.{firstDigit}{secondDigit}");
Verificar seu trabalho
Nesta tarefa, você executará o código e verificará se a saída está correta.
Verifique se o 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}");
Para executar o código e exibir a saída formatada, selecione Executar.
Para verificar se o código está funcionando conforme o esperado, compare a saída do 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 exibir resultados diferentes, você precisará examinar 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 o código até que ele produza os resultados esperados.
Importante
Não exclua nenhuma parte do código que você escreveu até agora. Você trabalhar com base nesse código no próximo exercício.