Ir para conteúdo

POWERED BY:

Arquivado

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

f43l

[Resolvido] c++ não arredondar numeros fracionarios

Recommended Posts

Meu problema:

 

Eu quero pegar o resto de uma divisão, mas o c++ ta arredondando ela automatico por exemplo:

 

o resto de 1985/16 é 0.0625, mas no c++ ele arredonda para 1

 

exemplo:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{   int x=1985;
	float y;
	y=x%16;
	cout<<y;
	system("PAUSE");
	return EXIT_SUCCESS;
}

Ele exibe o numero 1! eu quero que ele exiba o 0.0625

 

infelizmente sou iniciante e pesquisei o dia todo mas não consegui

desde ja agradeço a preocupação

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,o operador '%' trabalha com inteiros, pois, tratando-se de aritimética modular são faz sentido utilizar números que não sejam inteiros.

você vai ter que escrever a sua própria função.... não é nada muito difícil...

Recorre à definição de divisão, com inteiros:

* 'a', diferente de 0, divide 'b' apenas se existir 'k', tal que: b = a*k

* Denotase: a/b ou a|b

 

* Axiomas (adimitindo que a, b e c são números inteiros naturais)

- se a | b e a | c então a | (b + c)

- se a | b então a | (b*c)

- se a | b e b | c então a | c

fonte: eu xD (há mais disponível em: www.criptografia.com.pt)

 

Para pegar o resto de a/b imagine que deve existir 'k' e 'resto' tal que: b = a*k + resto

uma forma muito fácil de se fazer isso é:

resto = a/b - int(a/b)

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites
Cara,o operador '%' trabalha com inteiros, pois, tratando-se de aritimética modular são faz sentido utilizar números que não sejam inteiros.

 

Vitor, dá uma olhada melhor: os operandos do % estão certos. São inteiros.

O que tá errado é usar inteiro p/ conseguir parte fracionária.

E não precisa reescrever a função. Existe a fmodf.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Isis, se o operador '%' só trabalha com inteiros e retorna um inteiro, nunca virá o resto da divisão em um float...

Eu não conhecia essa função "fmodf", encontrei duas parecidas, uma chama-se "modf" e outra "fmod".

Acho que a que interessa é a "fmod":

http://www.cplusplus.com/reference/clibrary/cmath/fmod/

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que deu a entender do teu comentário é que ele não estava usando o tipo de operandos corretos no operador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É verdade... expressei-me mal, peço desculpas! :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu usaria esse fmod para pegar o resto da divisão? Por exemplo:

 

y=1985%16

 

no c++ o Y sai disso valendo 1

eu quero que ele sai valendo 0.0625 que é o correto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só consegui com um tal de modf, que pega a parte fracionaria e inteira de um numero

 

#include <cstdlib>
#include <iostream>
#include <math.h>
#include <stdio.h>

using namespace std;

int main(int argc, char *argv[])
{   double Valor = 124.0625;
	double ParteInteira;
	double ParteFracionaria;
	ParteFracionaria = modf(Valor, &ParteInteira);
	cout<<ParteFracionaria; 
	system("PAUSE");
	return EXIT_SUCCESS;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

sei lah vendo seu post parece q você nem lew oq escreveram =//

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites
Só consegui com um tal de modf,

 

Pelo que escreveu ('um tal de'), nem leu mesmo.

 

#include <cstdlib>
#include <iostream>
#include <math.h>
#include <stdio.h>

 

Em C++, use cmath.

 

Por que alguém usando iostream inclui stdio?

Compartilhar este post


Link para o post
Compartilhar em outros sites

vocês que parecem que não lêem, como eu disse: sou iniciante

claro que eu li mas tenho pouca noção ainda mas isso esta mudando

 

de qualquer forma vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

vocês que parecem que não lêem, como eu disse: sou iniciante

(Cara, encare isso como uma critica construtiva, por favor!!)

 

Exatamente por isso que te ajudamos, eu te expliquei onde estava errado, te ensinei como fazer o que você queria, até o link para a documentação da função eu te passei....

E você, no post a seguir você fala:

Como eu usaria esse fmod para pegar o resto da divisão? Por exemplo:

detalhe mínimo.... no link que te passei encontra-se o seguinte exemplo:

/* fmod example */
#include <stdio.h>
#include <math.h>

int main ()
{
  printf ("fmod of 5.3 / 2 is %lf\n", fmod (5.3,2) );
  printf ("fmod of 18.5 / 4.2 is %lf\n", fmod (18.5,4.2) );
  return 0;
}

O que parece, pelo menos pra mim, é que você nem ao menos entrou no link, entende??

Ajude-nos a te ajudar!

"Para ter a resposta certa, é preciso fazer a PERGUNTA certa" - Albert Einstein

 

Mas pronto, esquece isso, o importane é que você resolveu teu problema! :D :D

Abraços

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

"Para ter a resposta certa, é preciso fazer a PERGUNTA certa" - Albert Einstein

gostei vo por na minha assinatura ;D

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.