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.
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
Curtir tópico
+ 0
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.
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
Clique aqui para fazer login e interagir na Comunidade :)