Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pechi

[Resolvido] Float sem decimais...

Recommended Posts

Pessoal, estou aprendendo C agora e estou com um problema.

Criei uma funçaõ para realizar a média de 3 numeros.

Porem o resultado vem sem os decimais...

Alguem pode verificar o erro??

Obs.: Estou usando o DEV

float media3 (int v1, int v2, int v3) 
{
    return((v1+v2+v3)/3);
}

int main()
{
    int n1,n2,n3;
    float res;
        n1=1;
        n2=1;
        n3=2;

    res=media3(n1,n2,n3);
    printf("%f\n",res);    

    system ("pause");
}

A saída é 1.00000 e devia ser 1.3333.

Alguem sabe porque isso ocorre?

 

Valew

Compartilhar este post


Link para o post
Compartilhar em outros sites

printf("%5.2f\n", res); 

O 5.2 significa 5 casas antes da vírgula e 2 depois. =), Daí você coloca o que você achar melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

printf("%5.2f\n", res); 

O 5.2 significa 5 casas antes da vírgula e 2 depois. =), Daí você coloca o que você achar melhor.

 

Então cara, isso eu sei...

O que está errado não é o tanto de casas após a virgula e sim o valor delas.

 

O resultado que está aparecendo é 1.000000 (com a sua intervenção fica 1.00).

O que eu quero é que apareça 1.333333 (ou se for o caso do "%5.2f" deveria ficar 1.33).

 

Mas valeu cara. =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother, quando você divide a soma dos 3 inteiros por 3 o resultado é um inteiro, nesse caso o piso do valor que é 1.

Se você quer a parte fracionária do número você deve fazer a divisão de tipos pontos flutuantes, nesse caso você pode fazer:

// altere apenas os tipos dos parâmentros dessa função
float media3 (float v1, float v2, flaot v3) 
{
    return((v1+v2+v3)/3);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother, quando você divide a soma dos 3 inteiros por 3 o resultado é um inteiro, nesse caso o piso do valor que é 1.

Se você quer a parte fracionária do número você deve fazer a divisão de tipos pontos flutuantes, nesse caso você pode fazer:

// altere apenas os tipos dos parâmentros dessa função
float media3 (float v1, float v2, flaot v3) 
{
    return((v1+v2+v3)/3);
}

Valew cara... hahaha Valew mesmo... realmente funcionou.

Agora, você consegue me explicar porque isso acontece?

Quero dizer os int's que eu coloquei realmente tem valores inteiros!!! O que tem valor com ponto flutuante é o resultado da divisão deles...

Logo não faz sentido.. Os inteiros só estão abrigando os numeros o valor com ponto flutuante vai no Float...

você conseguem dar uma explicação que faça sentido?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não me lembro ao certo, mas acho que isso é porque C é uma linguagem fortemente tipada ( <- google ) e não trabalha com as informações de modo geral, isto é, quando você está fazendo operação só com inteiros, o processamento é feito utilizando blocos do tamanho de inteiros, logo o resultado esperado é um inteiro. Isso você deve encontrar no começo de livros sobre a linguegem...

Como eu disse, eu não tenho certeza se é isso mesmo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não me lembro ao certo, mas acho que isso é porque C é uma linguagem fortemente tipada ( <- google ) e não trabalha com as informações de modo geral, isto é, quando você está fazendo operação só com inteiros, o processamento é feito utilizando blocos do tamanho de inteiros, logo o resultado esperado é um inteiro. Isso você deve encontrar no começo de livros sobre a linguegem...

Como eu disse, eu não tenho certeza se é isso mesmo...

 

Ok Danilo..

 

você já ajudou bastante http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Tentarei encontrar a informação em algum livro Valeu mesmo cara.. http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

 

[PODE FECHAR]

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.