Logo Hardware.com.br
Thunder
Thunder General de Pijama Registrado
5.9K Mensagens 24 Curtidas

Como impedir o arredondamento no printf?

#1 Por Thunder 13/03/2009 - 23:23
Olá pessoal, na linguagem C, como posso impedir que o printf arredonde os resultados quando formato o resultado para 3 casas decimais?

printf("raiz:%.3f\n\n",raiz);
preciso formatar o resultado com precisão, mas o printf esta arredondando as casas decimais...agradeço qualquer ajuda..valew..
Thunder
Thunder General de Pijama Registrado
5.9K Mensagens 24 Curtidas
#3 Por Thunder
14/03/2009 - 01:34
Gordon disse:
Até onde eu sei não é possível fazer isso diretamente pois depende do SO e da máquina, se ninguém vier com uma solução melhor faça algum esquema hard coded mesmo definindo você mesmo a precisão.


Putz, então terei que criar uma função....

#include<stdio.h>
int main()
{
double num = 1.098765;
printf("Saida1: %.3lf\n\n",num);
printf("Saida2: %lf\n\n",num);
return 0;
}

saida:
Saida1: 1.099
Saida2: 1.098765

eu precisava de 1.098 na Saida 1....
Thunder
Thunder General de Pijama Registrado
5.9K Mensagens 24 Curtidas
#5 Por Thunder
14/03/2009 - 10:28
mcv disse:
Use floor.

O floor arredondaria para 1, suprimindo toda parte decimal, a solução que encontrei foi usar o flor para pegar o inteiro e diminuir do próprio numero para pegar o decimal, transformo o decimal em string...depois junto tudo na impressão, não é elegante, mas resolve o problema e garante meu pontinho na média..heheheh

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
double num = 1.7926627525871599;
char teste[19];
int i,inteiro;
double frac;
printf("Numero arredondado:%.3lf\n",num);
inteiro = floor(num);
frac = num -inteiro;
printf("Numero sem arredondamento:&quot;
printf("%d.",inteiro);
sprintf(teste,"%lf",frac*pow(10,16));
for(i=0;i<3;i++)
printf("%c",teste[i]);
return 0;
}
mcv
mcv Veterano Registrado
1.2K Mensagens 40 Curtidas
#7 Por mcv
14/03/2009 - 11:37
O floor arredondaria para 1, suprimindo toda parte decimal, a solução que encontrei foi usar o flor para pegar o inteiro e diminuir do próprio numero para pegar o decimal, transformo o decimal em string...depois junto tudo na impressão, não é elegante, mas resolve o problema e garante meu pontinho na média..heheheh
Quando recomendei floor, imaginei algo menos trabalhoso:

floor(f*1000)/1000
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal