Fórum Duvida em C Sharp #623678

01/03/2025

0

using System;
class ex033
{
static void Main()
{
float nota = 0;
Console.Write("Digite a nota: ");
nota = float.Parse(Console.ReadLine());

if (nota > 7)
{
Console.WriteLine("Aprovado");
} else
{
Console.WriteLine("Reprovado");

}
}
}



Porque quando eu boto a nota 6.8 ele da aprovado, sendo que 6,8 não é maior que 7.
Diego Sousa

Diego Sousa

Responder

Posts

01/03/2025

Arthur Heinrich

Não há nenhuma razão para isto ocorrer.

Quando se trabalha com ponto flutuante, temos que lembrar que valores fracionários do sistema decimal não são bem representados em binário e podemos observar problemas em comparações como a sua.

Números inteiros são bem representados. Se você fornecer o valor 7 (inteiro), o valor de nota deveria ser de exatamente 7. Porém, como você compara a nota com o símbolo de "maior que", o programa deveria retornar "Reprovado".

Quando um número não inteiro é imputado, podem ocorrer erros de arredondamento. O valor 6.8, por exemplo, pode ser representado como 6.79999xxx ou 6.80000xxx, devido ao erro causado pela precisão da variável.

Porém, mesmo com esse erro de arredondamento, 6.8 ainda é menor do que 7. A menos que, sua máquina esteja configurada para interpretar a vírgula como ponto decimal e, ao utilizar o ponto (6.8), o comando float.Parse() pode ter desconsiderado o ponto, interpretando 0 6.8 como 68, que é maior do que 7.

Teste usando a vírgula, para ver se dá erro de conversão, ou se passa, como Reprovado.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar