Club Delphi  
    FTP   CCD     Enlaces   Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Desplegado
  #1  
Antiguo 11-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 179
lmpadron Va por buen camino
FLOAT definir lugares decimales

Hola amigos

Hay alguna forma de definir cuantos numero decimales (o sea después de la ,) puedo usar en el Float.
O sea alguna forma de definir que mi variable de tipo Float solo use X cantidad lugares después de la coma

Gracias de Antemano
__________________
Cuando miras fijamente al abismo, este, te devuelve la mirada
Responder Con Cita
  #2  
Antiguo 11-08-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.087
duilioisola Va por buen camino
Una variable Float tiene (en teoría) infinitos decimales.
Lo que puedes hacer es redondear el valor a la cantidad de decimales que quieras.

Por ejemplo, deberías mirar el Help para la función RoundTo
Cita:
function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;

RoundTo(1234567, 3) 1234000
RoundTo(1.234, -2) 1.23
RoundTo(1.235, -2) 1.24
RoundTo(1.245, -2) 1.24
Otra cosa es que quieras que el usuario pueda entrar solo una cantidad determinada de decimales.
En es ecaso deberías ver las máscaras.
Responder Con Cita
  #3  
Antiguo 11-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 179
lmpadron Va por buen camino
muchas gracias mi hermano eso era exactamente lo que estaba buscando.
__________________
Cuando miras fijamente al abismo, este, te devuelve la mirada
Responder Con Cita
  #4  
Antiguo 11-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 179
lmpadron Va por buen camino
Un problemilla

Cuando uso el RoundTo() me dice
Código:
[C++ Error] Unit1.cpp(323): E2268 Call to undefined function 'RoundTo'.
inclui el <math.h> pero aun así me sigue dando el problema, alguna idea
__________________
Cuando miras fijamente al abismo, este, te devuelve la mirada
Responder Con Cita
  #5  
Antiguo 11-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 6.153
ecfisa Va camino a la fama
Hola impadron.

Código:
double pi= 3.141592654,r;
  ShowMessage(FloatToStr((int)(pi*100)/100.0));    // 2 decimales
  ShowMessage(FloatToStr((int)(pi*1000)/1000.0));  // 3 decimales
  ShowMessage(FloatToStr((int)(pi*10000)/10000.0));// 4 decimales
  r = (int)(pi*100000)/100000.0;                   // 5 decimales 
  //...
Saludos.

Última edición por ecfisa fecha: 11-08-2011 a las 15:58:00. Razón: Acomodar identación
Responder Con Cita
  #6  
Antiguo 11-08-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.087
duilioisola Va por buen camino
Veo que estás programando en C. No se dónde estará esta función en C.

De todos modos, si quieres programarla tu, la cosa va más o menos así:
Código Delphi [-]
function RedondearDecimales(Valor : Double; Decimales: integer): Double;
begin
   // Primero multiplico el valor por 10 tantas veces como decimales quiera
   // Valor=1.12345, Decimales=2 --> Valor=112.345
   for i := 0 to Decimales do
      Valor := Valor * 10;

   // Ahora tomo la parte entera de Valor
   // 112.345 --> 112
   Valor := Trunc(Valor);

   // Ahora lo divido por 10 tantas veces como decimales tenga
   // Valor=1123, Decimales=2 --> Valor=1.12
   for i := 0 to Decimales do
      Valor := Valor * 10;
end

Nota: Esta función no tiene en cuenta el último decimal:
1.239 = 1.23
La función perfeccionada debería tenerlo en cuenta y devolver
1.239 = 1.24
Responder Con Cita
  #7  
Antiguo 11-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 179
lmpadron Va por buen camino
Gracias por sus ejemplos duilioisola y ecfisa en ambos casos puedo definir con cuantos decimales deseo trabajar ahora como decia duilioisola en ninguno de los casos puedo redondear. Saben alguna forma de hacer en c++ ??
__________________
Cuando miras fijamente al abismo, este, te devuelve la mirada
Responder Con Cita
  #8  
Antiguo 11-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 6.153
ecfisa Va camino a la fama
Hola impadrón.

Para obtener 'n' números decimales:
Código:
...
#include <math.h>
...
double NumNDec(double Num, int Dec)
{
 return ((float)(int)(Num*exp(log(10)*Dec))/exp(log(10)*Dec));
}
Uso:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double pi= 3.141592654;
   for(int i=1; i< 5; i++)
     ListBox1->Items->Add(FloatToStr(NumNDec(pi,i)));
}
Saludos.

Última edición por ecfisa fecha: 11-08-2011 a las 16:57:30.
Responder Con Cita
  #9  
Antiguo 11-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 6.153
ecfisa Va camino a la fama
Hola Impadrón.

No había visto tu último mensaje mientras ponía el anterior.

Para redondear:
Código:
...
#include <math.h>
...
double Round(double Num, int Dec)
{
  return ((float)((int)(Num*pow(10,Dec)+0.5)))/pow(10,Dec);
}
Uso:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double pi= 3.141592654;
   for(int i=1;i< 5; i++)
     ListBox1->Items->Add(FloatToStr(Round(pi,i)));
}
Saludos.

Edito: En el ejemplo de número de dígitos me había olvidado de pow... , así que hice unos malabares...

Usando pow la función sería:
Código:
 double NumNDec(double Num, int Dec)
{
 return ((float)(int)(Num*pow(10,Dec))/pow(10,Dec));
}

Última edición por ecfisa fecha: 11-08-2011 a las 18:13:03.
Responder Con Cita
  #10  
Antiguo 11-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 179
lmpadron Va por buen camino
muchas gracias
__________________
Cuando miras fijamente al abismo, este, te devuelve la mirada
Responder Con Cita
  #11  
Antiguo 12-08-2011
jcosta jcosta is offline
Registrado
 
Registrado: feb 2008
Posts: 6
jcosta Va por buen camino
Yo utilizo la función FormatFloat. Sería algo así:

cadena = FormatFloat("0,.000", numero)

numero sería el valor decimal original y en cadena nos quedaria un string con separador de miles (,) , en este caso con tres decimales (número de ceros a la derecha del .). Si se quiere luego se puede volver a convertir de String a float con StrToFloat.

Un saludo
Responder Con Cita
  #12  
Antiguo 12-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 179
lmpadron Va por buen camino
voy a probarlo !!!
__________________
Cuando miras fijamente al abismo, este, te devuelve la mirada
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
cantidad de decimales en campo float look SQL 5 04-10-2010 18:53:54
mostrar en una grilla float con 4 decimales Patricio Varios 2 12-11-2008 14:27:49
manejo de decimales de un Float BC++ C++ Builder 3 12-08-2008 17:51:58
reducir decimales de float el_barto Varios 4 22-09-2005 21:27:09
Decimales con más de 4 lugares después del punto...? Blazer2104 Conexión con bases de datos 2 10-11-2004 15:15:22


La franja horaria es GMT +2. Ahora son las 07:56:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi