Ir ao conteúdo

Ponto Flutuante no CCS


foxlove

Posts recomendados

Postado

Pessoal estou começando a programar em C para microcontroladores e estou usando o PIC16F877. Estou usando o compilador CCS. Eu declarei uma variavel float e estou fazendo algumas contas com ela, mais ai chega um certo ponto do meu programa que eu quero pegar a parte inteira e a parte fracionario do numero mais não estou conseguindo. Eu já usei a função MODF() mais não funcionou, quando ela retorna o valor a parte inteira fica zerada e a parte fracionaria da um numero muito estranho. Ja tentei tambem fazer uma variavel int receber a variavel float, a parte inteira eu consigo pegar mais quando tento diminuir o inteiro do float para pegar a parte fracionaria o resultado me retorna zero. Peço ajuda se alguem souber com resolvo isso. Obrigado.

Postado

Sim, ela pode. Dentro dos limites de uma variável int. O que ocorre é que fazendo isso, você só pega a parte inteira do ponto flutuante.

Acho que cada compilador tem funções específicas pra lidar com isso. O que eu faço é transformar um flutuante em string, e depois manipular a string.

A função FTOA faz esse trabalho. Veja se seu compilador possui funções de transformação de números para strings.

[]'s

Postado

Vamos lá!


float meupontoflutuante = 5.9;

//++++++++++++++++++++++++++++++

int dezena = meupontoflutuante;
int unidade;

unidade = meupontoflutuante * 10;
unidade = (unidade - (dezena * 10));

Isso se você estiver usando números com só uma casa após a virgula, se usar mais terá de por 100 1000 10000 .... invés de 10.

Postado

então eu procurei aqui e não tem essa função no compilador que estou usando. Mais obrigado pela dica.

então Dani piresk eu tentei fazer isso que você falo mais não deu certo também, ele me retorna valor zero após a virgula, eu não entendo. A parte inteira eu consigo pega mais os decimais ele sempre me retorna zero. Mais valeu pela ajuda.

Pessoal descobri o problema... quando se faz uma operação de divisão entre dois inteiros o resultado vai ser um numero inteiro, mesmo q uma variavel float receba o resultado. Então tem força o resultado ser float, mais ou menos assim:

int x,y;

float z;

z = 10 + ((float) x / y);

Dessa maneira o resultado sai com sua parte inteira e fracionaria.

A maneira errada é essa:

int x,y;

float z;

z = 10 + (x / y);

O resultado sai um numero inteiro, mesmo q o resultado da divisão de um numero fracionario...o compilador entende só a parte inteira e o resultado final fica errado.

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!