Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Variaveis double

Estou eu deboas na aula de variáveis double no CSharp e me deparei com uma duvida:

na hora de fazer a demonstração ele usa : double idade; idade = 15 / 2 ; sem o .0 o numero após a virgula seria ignorado e o certo seria colocar em uma das propriedades o valor com virgula tipo: double idade; idade = 15.0 2; e o resultado seria 7,5. Porém, numa situação hipotética que vou criando enquanto to codando é de eu não poder inserir os valores, tipo um cliente que colocar o 15/2, como eu faria pra aparecer quebrado, eu pensei po é só colocar um valor que se anule com virgula ne tipo +1.0 - 1.0 no final ou só +0.0 exempo: double idade; idade = 1.0 + 15 / 2 - 1.0; só que isso não funciona, e continuar resultando em 7 sem a virgula, alguém sabe me dizer o porque? Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

4 respostas

Olá Wallace, tudo bem? Se entendi corretamente, você quer converter a entrada do usuário para double . Certo?

Usando double.TryParse()

Neste caso, por exemplo, você poderia realizar a conversão do parâmetro lido através da função double.TryParse(). Por exemplo:

// Lê o valor do console
double valorDecimal;

// Se conseguiu converter o valor lido para double, armazene em valorDecimal
if (!double.TryParse(Console.ReadLine(), out valorDecimal)) {
    // Apresenta um erro por falha na conversão
}
// Valor decimal pode ser usado

De acordo com a documentação, a função TryParse retorna um bool informando se a conversão aconteceu ou não.

public static bool TryParse (string? s, out double result);

Usando Convert.ToDouble()

Você pode realizar essa conversão através da utilização da função Convert.ToDouble(). De acordo com a documentação.

double resultado = Convert.ToDouble(entrada);

Por exemplo:

// Lê o valor do console e converte para double
double valorDecimal = Convert.ToDouble(Console.ReadLine());

// Se o valorDecimal for válido, pode ser utilizado

Vale observar que nessa implementação, você precisará tratar "manualmente" o caso de não conseguir realizar a conversão da valor lido no console. Caso o valor lido no Console.ReadLine() seja inválido, uma exceção (FormatException) será lançada.

Calma ai amigo muito avançado pra mim, metade dos codigos ai nunca vi o.o no explinho basico ali, gostaria de saber o porque não funciona colocando +0.0 ou +1.0-1.0, mas muito obrigado pela resolução

solução!

O ponto neste seu caso é o seguinte: Você está somando 0 ao valor de 15/2.

Vamos lá:

// Simplificação da sua instrução
double idade = 1.0 + 15/2 - 1.0

Nesse caso, o compilador executa a divisão 15/2 (considerando o 15 e o 2 como valores inteiros) e o resultado é "truncado" e só a parte "inteira" será retornada. 7.5 vira 7.

A sua estratégia de somar um número do tipo double é interessante. Porém, nesse nosso caso (1.0 - 1.0 = 0), você estaria somando 0 (zero) ao 7. Desse modo, ao organizar as operações do código, o compilador "percebe" que há uma soma por zero e desconsidera essa operação. O mesmo acontece ao dividir o valor por 1.0... Como a operação é "inútil", o compilador desconsidera.

Para forçar que o valor seja um double, você poderia realizar a divisão em 15/2.0, especificando o tipo do divisor.

Aaah agora sim consegui entender, muito obrigado George!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software