Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
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
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
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.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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: 204
Poder: 16
lmpadron Va por buen camino
muchas gracias mi hermano eso era exactamente lo que estaba buscando.
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
Responder Con Cita
  #4  
Antiguo 11-08-2011
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
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
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
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: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Ú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.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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: 204
Poder: 16
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++ ??
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
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: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Ú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: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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));
}
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Ú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: 204
Poder: 16
lmpadron Va por buen camino
muchas gracias
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
Responder Con Cita
  #11  
Antiguo 12-08-2011
jcosta jcosta is offline
Registrado
 
Registrado: feb 2008
Posts: 9
Poder: 0
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: 204
Poder: 16
lmpadron Va por buen camino
voy a probarlo !!!
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
Responder Con Cita
Respuesta



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 21:23:47.


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