Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   sumando dos float no pbtengo valor real (https://www.clubdelphi.com/foros/showthread.php?t=75688)

lmpadron 12-09-2011 20:52:24

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

ecfisa 12-09-2011 21:08:07

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. :)

lmpadron 12-09-2011 21:33:03

ok gracias amigo, funciona perfecto


La franja horaria es GMT +2. Ahora son las 10:42:53.

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