Autor Tema: Instrucción que me redondee un decimal al entero más próximo  (Leído 4680 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Instrucción que me redondee un decimal al entero más próximo
« 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
« Última modificación: 24 de Junio de 2010, 14:21:11 por Enigma »
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #1 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 !

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #2 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
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #3 en: 24 de Junio de 2010, 15:52:39 »
Otra pregunta... el PCW (V. 4.0) no soporta la libreria match.h???
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #4 en: 24 de Junio de 2010, 15:54:12 »
Te has fijado en la ayuda???

Ahi viene definidio FLOOR y demas funciones.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #5 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 ;-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #6 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

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #7 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
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #8 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 ;-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #9 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

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #10 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
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #11 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
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #12 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

Desconectado Lucho08

  • PIC10
  • *
  • Mensajes: 24
Re: Instrucción que me redondee un decimal al entero más próximo
« Respuesta #13 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