Você está na página 1de 2

Para arredondamos um número decimal (de ponto flutuante) em C, temos duas alternativas,

usamos a função ceil() ou a floor().

Ceil: Ela arredonda para cima, ex: 1,98 ficaria 2


Floor: Esta faz o oposto da ceil, arredonda para baixo, ex: 1,56 ficaria 1

Segue abaixo um código de exemplo do uso destas funções:


view plaincopy to clipboardprint?

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

int main()
{
int resultado,resultado2;
double valor;

printf("Digite um valor:");
scanf("%lf",&valor);

resultado = ceil(valor);
resultado2 = floor(valor);

printf("Arredondado com ceil: %d\n",resultado);


printf("Arredondado com floor: %d\n",resultado2);

return 0;
}

tipo.. ao inves de imprimir "0.1003"


voce que imprimir "0.10"

Delimitar o numero de casas decimais?

main(){
printf("%.2f\n", 1.23456);
}

O programa imprime na tela so 1.23

Se num for isso que voce perguntou foi mal ter entendido errado

Linux user: Vinícius Veloso de Mello Garcia


starfox00
(usa Outra) [3] Enviado em 05/01/2010 - 17:35h:
Respondendo

Seguinte, eu fiz duas mini-funções(defines) pra resolver isso


#include <math.h>

#define ARRED(x) floor( x + 0.5 ) //Isso retorna um inteiro

#define ARRED2(x, z) floor( x*pow(10, z) + 0.5 )/pow(10, z) //sendo z o numero de casas


decimais

Olha, repara que a primeira só tranforma floats em inteiros, daí eu vi seu problema e adaptei ela
pra arredondar a partir da casa decimal que voce quizer, daí apareceu o ARRED2.

então, ARRED(5.45) = ARRED2(5.45, 0) = 5.00 testei isso pra 5 valores de x.

porem, não testei para valores de z != 0, pq num era do meu interesse :P, bem se for usar dá
uma testadinha ai antes de usar pq se bobiar funciona ate pra valor de z negativo.

Legenda:
pow(x,y) = função do math.h que retorna x elevado a y
floor(x) = função do math.h que arredonda a parte decimal sempre pra baixo. (floor(9.99) = 9)

por fim taí um site que tem uma funções legais do math.h:
http://200.136.79.4/informatica/alunos/tutoriais/C/LCPP_aulaI_funcoespredefinidas.htm

Você também pode gostar