TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Enigma en 24 de Junio de 2010, 14:16:34

Título: Instrucción que me redondee un decimal al entero más próximo
Publicado por: Enigma en 24 de Junio de 2010, 14:16:34
Hola muy buenas tardes... Una preguntita a los foristas más experimentados... De casualidad existe alguna instrucción en C que me redondee un real a su entero más próximo...?

Ejemplo:

1,5 lo lleve a 2
2,3 lo lleve a 2
0,8 lo lleve a 1
4,1 lo lleve a 4

Gracias...

Atte: Enigma... La llanerita de Guayana :D
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: RICHI777 en 24 de Junio de 2010, 14:21:21
Hola llanera, fijate si tu compilador soporta esta función:

floor

Deberia estar incluido en math.h

Saludos !
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: Enigma en 24 de Junio de 2010, 14:26:36
Si ya la probé pero el PICC me da error!!!! esa no la soporta!


Atte: Enigma... La llanerita de Guayana :D
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: Enigma en 24 de Junio de 2010, 15:52:39
Otra pregunta... el PCW (V. 4.0) no soporta la libreria match.h???
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: AKENAFAB en 24 de Junio de 2010, 15:54:12
Te has fijado en la ayuda???

Ahi viene definidio FLOOR y demas funciones.
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: Enigma en 24 de Junio de 2010, 15:57:38
si ya lo visite pero cuando coloco esa instrucción en la ayuda del picc no me arroja ningun resultado.... me sale como si no existiera.....


Atte: Enigma... La llanerita de Guayana ;-)
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: AKENAFAB en 24 de Junio de 2010, 15:58:37
Revisa lo que comenta nocturno de +.5

Tambien lo puedes checar aqui

http://www.ccsinfo.com/forum/viewtopic.php?t=4300&highlight=floor
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: willynovi en 24 de Junio de 2010, 16:00:45
si tienes un valor real, estara definida la variable como float, si quieres redondearlo podrias hacer un cast a unsigned int, o creo tambien a unsigned char.

float fvalor;
unsigned int uivalor;

fvalor = 2,4;
uivalor = unsigned int(fvalor);

puede que cuando compiles te de la advertencia de que pierdes datos con esta instruccion, pero justamente es lo que quieres :D

con esto creo que te queda uivalor = 2
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: Enigma en 24 de Junio de 2010, 16:02:43
Si ya chequee toda esa info.... pero cuando trato de implementarla a PICC, pues me aparece como desconocido... cuando declaro la librería math.h el compilador me da error diciendo que no la reconoce....... además que no me reconoce la instrucción floor.... :(

Atte: Enigma... La llanerita de Guayana ;-)
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: bmb en 24 de Junio de 2010, 16:05:11
Hola, el CCS soporta la librería math.h y allí las funciones floor y ceil.

De la ayuda del CCS:

floor( )
--------------------------------------------------------------------------------
Syntax:
  result = floor (value)
Parameters:
  value is a float
Returns:
  result is a float
Function:
  Computes the greatest integer value not greater than the argument.  Floor (12.67) is 12.00.
Availability:
  All devices.
Requires:
  #include <math.h>
 
ceil( )
--------------------------------------------------------------------------------
Syntax:
  result = ceil (value)
Parameters:
  value is a float
Returns:
  A float
Function:
  Computes the smallest integer value greater than the argument.  CEIL(12.67) is 13.00.
Availability:
  All devices
Requires:
  #include <math.h>
 
Saludos
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: Enigma en 24 de Junio de 2010, 16:06:06
o.k willynovi... en dado caso de no funcionar el floor trataré de implementar tu sugerencia... gracias por el aporte!

Atte: Enigma... La llanerita de Guayana :D
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: Enigma en 24 de Junio de 2010, 16:09:22
o.k ya lo configure y el CCS ya me lo acepto, ya me corrio wiiiiiiiiii..... :lol: ahora voy a ver si  funciona de verdad.... ahorita traigo resultados....

Atte: Enigma... La llanerita de Guayana :D
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: bmb en 24 de Junio de 2010, 16:21:24
Hola muy buenas tardes... Una preguntita a los foristas más experimentados... De casualidad existe alguna instrucción en C que me redondee un real a su entero más próximo...?

Veo que lo que necesitas es que la función te redondee el float al número más próximo.  Alguna vez vi en el foro del CCS esta instrucción:

floor(n+0.49999);

En donde n es la variable o número a redondear.

Saludos
Título: Re: Instrucción que me redondee un decimal al entero más próximo
Publicado por: Lucho08 en 28 de Junio de 2010, 12:59:38
En caso de que no lo soluciones, usa esto:


int var1;
float rel;
,
,
,
,
rel = 18.6;// Aqui va el numero float, que quieres redondear
var1 = (int)rel;
if (rel-var1>=0.5)var1++;

finalmente en var1 queda el resultado;;

cordial saludo