Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Truncar Float

Estas en el tema de Truncar Float en el foro de C/C++ en Foros del Web. Cree un float y necesito k solo tenga 3 cifras decimales, como puedo truncarlo?...
  #1 (permalink)  
Antiguo 01/11/2006, 21:25
 
Fecha de Ingreso: septiembre-2006
Mensajes: 328
Antigüedad: 17 años, 8 meses
Puntos: 3
Truncar Float

Cree un float y necesito k solo tenga 3 cifras decimales, como puedo truncarlo?
  #2 (permalink)  
Antiguo 02/11/2006, 07:56
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Aquí me has pillado, no sé si existe una función específica en el ANSI-C.

Una solución sucia y rápida que se me ocurre, es multiplicar por una potencia de 10 para dejar en la parte entera lo que quieras conservar, y en la decimal lo que no, para después usar modf() para conseguir la parte entera, y dividirla de nuevo por la misma potencia de 10.
  #3 (permalink)  
Antiguo 02/11/2006, 22:03
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
No es tan sucio.

Puedes hacer lo siguiente:


Código:
 float truncar(float nro){
     long x = 1000 * nro;
     float y = (float)x / (float)1000;
     return y;
}
Lo probe y anda joya
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #4 (permalink)  
Antiguo 03/11/2006, 07:46
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por TolaWare Ver Mensaje
No es tan sucio.

Puedes hacer lo siguiente:


Código:
 float truncar(float nro){
     long x = 1000 * nro;
     float y = (float)x / (float)1000;
     return y;
}
Lo probe y anda joya
Ya bueno, pero es "más correcto" usar modf() para conseguir la parte entera, puesto que sirve para ese propósito.

En cualquier caso sería mejor añadir el número de decimales a coger:

float truncar(float f, unsigned int n) { float d = pow(10,n); return ((long)(d * f)) / d; }
  #5 (permalink)  
Antiguo 03/11/2006, 10:05
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Tambien esta otra ocpion.
Con sscanf("%2.3f", &numero_float);

No se cual sea mas sucia.
Jajajaja

Saludos
  #6 (permalink)  
Antiguo 04/11/2006, 20:31
 
Fecha de Ingreso: septiembre-2006
Mensajes: 328
Antigüedad: 17 años, 8 meses
Puntos: 3
Jajja Muchas gracias a todso funcionan, ahora tengo mas de una forma para resolver mi "problema".
  #7 (permalink)  
Antiguo 10/11/2006, 18:54
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
JEJE, podriámos hacer un concurso de quién hace los códigos mas SUCIOS y cortos
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #8 (permalink)  
Antiguo 10/11/2006, 19:34
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
No has visto el ultimo que pudo maxextreme?

saludos
  #9 (permalink)  
Antiguo 13/11/2006, 11:23
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Para eso ya tenemos el concurso de Obfustaced C:

Código:
#define _ F-->00 || F-OO--;
long F=00,OO=00;
main(){F_OO();printf("%1.3f\n", 4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
       _-_-_-_-_-_-_-_-_
            _-_-_-_
}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:36.