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 12-09-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
sumando dos float no pbtengo valor real

Hola Amigos

Acudo a ustedes (como siempre XD) sucede que estoy sumando dos valores de tipo float y no obtengo el valor real cuando suma. Posteo el código a parti de una ayuda del amigo ecfisa y de paso los valores con los que sume para probar.


incluyo la math.h

en la .h
Código:
double Round(double Num, int Dec)
        {
                return ((float)(int)(Num*pow(10,Dec))/pow(10,Dec));
        }
en el onclick del button
Código:
float sum;
        sum = StrToFloat(Edit1->Text) + StrToFloat(Edit2->Text);

        Edit3->Text = FloatToStr(Round(sum,3));
        Edit4->Text = FloatToStr(sum);
Los numero usados para probar son 10,444 y 0,001 el resultado debería ser 10,445 sin embargo no hace modificaciones, si uso 0,010 lo devuelve bien y si uso 0,100 me devuelve 10,543. No redondea en el caso 1 y 3, en el dos puede ser que lo haga pero también puede ser una que no, dado que el numero completo después del tercer dígito decimal es 0 y como no efectúa ningún cambio pues queda igual. Alguna idea de porque este problema de la suma y el redondeo pasa?

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_
________________________________________________________________________________

Última edición por lmpadron fecha: 12-09-2011 a las 21:00:31.
Responder Con Cita
  #2  
Antiguo 12-09-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.

Creo que el problema está en que la función de redondeo que te puse antes es:
Código:
  return ((float)((int)(Num*pow(10,Dec)+0.5)))/pow(10,Dec);
Pero veo que tenés:
Código:
  return ((float)(int)(Num*pow(10,Dec))/pow(10,Dec));
Hice esta prueba con los números que indicas y funciona bién:
Código:
double Redondear(double Num, int Dec)
{
  return ((float)((int)(Num*pow(10,Dec)+0.5)))/pow(10,Dec);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
float n1= 10.444, n2= 0.001, sum = n1 + n2;
  Edit1->Text = FloatToStr(Redondear(sum,3)); /* muestra: 10.445 */
}
Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 12-09-2011 a las 21:11:09.
Responder Con Cita
  #3  
Antiguo 12-09-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
ok gracias amigo, funciona perfecto
__________________
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
problema al convertir valor en edit de forma str a float jirbert Varios 25 03-10-2008 23:48:02
Borrar campos float con valor null en tablas paradox NPIdea SQL 2 26-01-2007 09:44:56
Sumando columnas con Qreport ? Coco_jac Varios 5 27-01-2006 14:57:56
Valor Null en campo float de un FasReport Romanosky Impresión 4 10-11-2004 17:56:04
error sumando campos weke SQL 2 02-06-2004 14:52:33


La franja horaria es GMT +2. Ahora son las 01:40:01.


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