Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problema al convertir valor en edit de forma str a float (https://www.clubdelphi.com/foros/showthread.php?t=60469)

jirbert 03-10-2008 06:29:16

problema al convertir valor en edit de forma str a float
 
buenas noches como siempre lo hago antes de abrir un hilo nuevo busco primero a ver si consigo problemas relacionados con el mio, pero por ser internet se encuentra un gran cantidad de problemas paracidos pero de los que lei ninguno concuerda con el mio, por otra parte como me urge un pronta respuesta decidi abrir un hilo

aqui les dejo mi problema y espero me puedan ayudar gracias de antemano..

tengo un programa de facturacion, el cual al agregar o eliminar un producto me hace la siguiente funcion:
Código Delphi [-]
Var
Precio : Currency;
iva,total,total2:double;
n1,n2,nt:double;
begin
 precio := 0;
    form1.Table4.DisableControls;
    try
     form1.Table4.First;
      While Not form1.Table4.Eof do
      begin
       Precio := Precio + form1.Table4.FieldbyName('Total').ASCurrency;
       form1.Table4.Next;
      end;
       edit4.Text := CurrToStr(Precio);
        finally
     form1.Table4.EnableControls;
    end;
  begin
    total:=strtofloat(edit4.text);
    iva:=total*0.09;
    edit5.Text:=format('%f',[iva]);
    n1:=strtofloat(edit4.text);
    n2:=strtofloat(Edit5.text);
    nt:=n1+n2;
    edit6.Text:=floattostr(nt);
  end;

esto va calculado en tres tedit

edit1 subtotal este campo viene expresado en entero ya que todos lo productos que se ingresan son enteros
edit2 iva este flotante po lo de *0.09
edit3 total y este a su vez deveria ser flotante porque es la suma de edit1+edit2 pero no.

ejemplo:
asi deberia ser:

edit1 subtotal 13245
edit2 iva 1192,05
edit3 total 14437,05

asi lo hace:

edit1 subtotal 13245
edit2 iva 1192,05
edit3 total 14437,0

y como por otra parte tengo trabando el Atexto para convertir el monto en letras para la factura me da como resultado:

catorse mil cuatrocientos treinta y siete con cero cinco centimos

entonces no entiendo otra cosa que me interesaria es hacer que de este formato:

edit1 subtotal 13245
edit2 iva 1192,05
edit3 total 14437,05

se viera asi:

edit1 subtotal 1.3245
edit2 iva 1.192,05
edit3 total 14.437,05

con la separacion de decimales y de miles!!

gracias por la ayuda que puedas brindarme!!!!:)

Lepe 03-10-2008 08:20:34

La verdad es que eso de sumar lo podías hacer con un query:
Código Delphi [-]
query1.sql.text := 'select SUM(total) from tabla where idfactura = ' + inttostr(numeroFactura
query1.Open;
suma_total := query1.fields[0].AsCurrency;

En lugar de floattostr, usa FormatFloat(',#0.00', suma_total)

Saludos

jirbert 03-10-2008 13:18:22

hola lepe gracias por la sugerencia
 
hola lepe gracias por la sugerencia, pero estoy empezando a creer que son problemas matematicos
porque
en este ejemplo

edit1
subtotal 59595
edit2 iva 5363,55
edit3 total 64958,55

me puse a sacar cuentas en calculadoras y al igual que mi programa omite en cero de la derecha del decimal. con respecto a lo de la separacion de decimales y miles. no me funciona yo estuve probando

Código Delphi [-]
edit6.text:=format('#.###,##', (edit6.text))

pero no me funciona ni la que me proporcionaste.. de todas formas gracias por la ayuda

Luis M. 03-10-2008 14:39:56

Prueba esto:

Código Delphi [-]
edit6.text:=format('#,##0.00', (edit6.text))

ContraVeneno 03-10-2008 15:03:11

¿por que en lugar de utilizar TEdits para manejar valores monetarios no utilizas el TJVValidateEdit de las Jedi?, son gratis y muy muy recomendables.

Además de que te evitas la pena de andar haciendo conversiones de Str a Curr o viceversa:

UnValidateEdit.AsCurrency := FieldByName('unCampo').AsCurrency; // AsCurrency, AsINteger, AsFloat, AsString... como quieras.
UnValidateEdit.AsCurrency := OtroValidate.AsCurrency + 100;

Y para los formatos, simplemente editar una o dos propiedades y te olvidas del formato...

egostar 03-10-2008 15:45:42

Cita:

Empezado por jirbert (Mensaje 317883)
hola lepe gracias por la sugerencia, pero estoy empezando a creer que son problemas matematicos
porque
en este ejemplo

edit1
subtotal 59595
edit2 iva 5363,55
edit3 total 64958,55

me puse a sacar cuentas en calculadoras y al igual que mi programa omite en cero de la derecha del decimal. con respecto a lo de la separacion de decimales y miles. no me funciona yo estuve probando

Código Delphi [-]
edit6.text:=format('#.###,##', (edit6.text))

pero no me funciona ni la que me proporcionaste.. de todas formas gracias por la ayuda

Hola

Yo sugiero que se use esto:

Código Delphi [-]
  edit1.Text := Format('%m',[subtotal]);
  edit2.Text := Format('%m',[IVA]); 
  edit3.Text := Format('%m',[subtotal+IVA]);

Salud OS

jirbert 03-10-2008 16:37:20

hola egostar gracias por el suministro
 
hola egostar gracias por el suministro, pero al igual que el de lepe no me da respuesta diferente sigue siendo la misma, ContraVeneno de casualidad tienes algun link para descargar eso de las jevi porque estuve googleando y no consegui nada!!

Lepe 03-10-2008 16:48:44

Busca por JVCL seguro que vas derechito a la web ;)

Si no te funciona, ojito que en mi ejemplo suma_total está declarado como un float, si es un string desde luego que no funciona.

saludos

ContraVeneno 03-10-2008 16:53:17

changos... hace un mes que salió la 3.35 y yo sigo con la 3.34... a caray... la 35 está en pruebas todavía... que bien, entonces seguimos con la 3.34
http://sourceforge.net/project/showf...ease_id=616736

jirbert 03-10-2008 16:55:05

funcionan con cualquier delphi verdad yo tengo delphi6, gracias por el link

ContraVeneno 03-10-2008 17:03:14

pues yo los tengo instalados en un Delphi 5, en un 2006 y en un 2007... así que supongo que sí funcionan en delphi 6 :D

egostar 03-10-2008 18:04:42

Cita:

Empezado por jirbert (Mensaje 317917)
hola egostar gracias por el suministro, pero al igual que el de lepe no me da respuesta diferente sigue siendo la misma, ContraVeneno de casualidad tienes algun link para descargar eso de las jevi porque estuve googleando y no consegui nada!!

Hola,

No te entiendo, esto es lo que me muestra a mi.



Esto es como hago los calculos

Código Delphi [-]
  subtotal := 13245;
  iva := SubTotal * 0.09;
  edit1.Text := Format('%m',[SubTotal]);
  edit2.Text := Format('%m',[IVA]);
  edit3.Text := Format('%m',[SubTotal+IVA]);

Salud OS

jirbert 03-10-2008 18:33:11

Cita:

Empezado por egostar (Mensaje 317953)
Hola,

No te entiendo, esto es lo que me muestra a mi.



Esto es como hago los calculos


Código Delphi [-]
subtotal := 13245;
iva := SubTotal * 0.09;
edit1.Text := Format('%m',[SubTotal]);
edit2.Text := Format('%m',[IVA]);
edit3.Text := Format('%m',[SubTotal+IVA]);





Salud OS

bueno egostar es si lo hace a segun como deberia ser per opor ejemplo cuando es 13254,50 aprece 13254,5 y a la hora del Atexto aparece 50, por lo que el contador me esta sugiriendo que lo acomode de tal modo que aparezca tal cual como en el texto con sus dos decimales, ya que esas son las normas que piden.

jirbert 03-10-2008 18:50:45

saben algo me puse a verificar la base de datos y todos las facturas antes realizadas estan guardadas perfectamente, ahora no se porque a la hora de reflejarlo en el edit me elimina el cero del segundo decimal, y al imprimirlo sale igual que lo reflejado en el edit pero segun todos los registros en la bd estan perfectamente.:eek:

Delphius 03-10-2008 18:58:59

¿Podrías mostrarnos un poco de código? Tal vez de esa manera podríamos saber donde está el problema.
La verdad es que podríamos estar adivinando donde está el problema, sería muy recomendable que expongas el código para saber como y que estás haciendo... tal vez hay algo en el medio que afecta.

Saludos,

egostar 03-10-2008 19:00:00

Cita:

Empezado por jirbert (Mensaje 317967)
saben algo me puse a verificar la base de datos y todos las facturas antes realizadas estan guardadas perfectamente, ahora no se porque a la hora de reflejarlo en el edit me elimina el cero del segundo decimal, y al imprimirlo sale igual que lo reflejado en el edit pero segun todos los registros en la bd estan perfectamente.:eek:

Dejame entender, como es que quieres que se traduzca 13254,5
  • Trece mil doscientos cincuenta y cuatro pesos 50/100 MN
  • Trece mil doscientos cincuenta y cuatro pesos con 50 centavos
  • Trece mil doscientos cincuenta y cuatro pesos con cincuenta centavos

Porque acabo de probar el componente y a mi me muestra esto

trece mil doscientos cincuenta y cuatro pesos con cincuenta centavos

Uso esto

Código Delphi [-]
  Letras1.Numero := 13254.5;
  Letras1.Moneda := 'pesos';
  Letras1.Centavos := 'centavos';
  ShowMessage(Letras1.AsString);

Usando este valor

Código Delphi [-]
  Letras1.Numero := 13254.05;
  Letras1.Moneda := 'pesos';
  Letras1.Centavos := 'centavos';
  ShowMessage(Letras1.AsString);

Me muestra

trece mil doscientos cincuenta y cuatro pesos con cinco centavos

Salud OS

jirbert 03-10-2008 19:09:57

hola delphius mira tengo esto en el boton de entrada de cada producto
Código Delphi [-]
Var
Precio : Currency;
iva,total:double;
n1,n2,nt:double;

begin
 form1.Table4.Append;
 form1.Table4.Fields[0].Value:=edit2.Text; // bd datos temporal de productos a facturar
 form1.Table4.Fields[1].Value:=edit9.Text;// bd datos temporal de productos a facturar
 form1.Table4.Fields[2].Value:=edit7.text; // bd datos temporal de productos a facturar
 form1.Table4.Fields[4].Value:=edit8.Text;// bd datos temporal de productos a facturar
 form1.Table4.Fields[5].Value:=edit4.Text; // bd datos temporal de productos a facturar
 form1.Table4.Fields[3].Value:=edit5.Text; // bd datos temporal de productos a facturar
 form1.Table4.Fields[6].Value:=edit6.Text; // bd datos temporal de productos a facturar
 form1.Table4.Post; // bd datos temporal de productos a facturar 
 panel1.Visible:=false;

    precio := 0;
    form1.Table4.DisableControls;
    try
     form1.Table4.First;
      While Not form1.Table4.Eof do
      begin
       Precio := Precio + form1.Table4.FieldbyName('Total').ASCurrency;
       form1.Table4.Next;
      end;
       edit4.Text := CurrToStr(Precio);
        finally
     form1.Table4.EnableControls;
    end;
  begin
    total:=strtofloat(edit4.text);  // esto es el subtotal
    iva:=total*0.09;
    edit5.Text:=format('%f',[iva]);   //aqui el iva
    n1:=strtofloat(edit4.text);
    n2:=strtofloat(Edit5.text);
    nt:=n1+n2;
    edit6.text:=floattostr(nt);   // aqui la suma de ambos

 end;

end;

egostar yo utilizo este:
  • Trece mil doscientos cincuenta y cuatro pesos con cincuenta centavos

Delphius 03-10-2008 19:22:37

No veo el problema, al menos con una visión rápida, pero lo que si noto que hay muchos pasos de float a string y a la inversa.... ¿Porqué en vez de estar haciendo estas conversiones (a mi modo de ver innecesarias) no guardas los datos en variables temporales y muestras el resultado final en los edits?

Quizá el lio está en esas conversiones de float a string y a la inversa, de string a float.

Saludos,

egostar 03-10-2008 20:35:33

Hola

No entiendo para que usas esos tipos de datos, yo usaria esto, :rolleyes:

Código Delphi [-]
Var
  Precio,iva,total : Real;
begin
    Precio := 0;
    form1.Table4.First;
    while Not form1.Table4.Eof do begin
       Precio := Precio + form1.Table4.FieldbyName('Total').Value;
       form1.Table4.Next;
    end;
    edit4.Text := format('%m',[Precio]);
    iva:= Precio * 0.09;
    edit5.Text := format('%m',[iva]); 
    edit6.Text := format('%m',[Precio+iva]); 
    Letras1.Numero := Precio+iva;
    Letras1.Moneda := 'pesos';
    Letras1.Centavos := 'centavos';
    ShowMessage(Letras1.AsString);
end;

Salud OS

jirbert 03-10-2008 20:56:09

bueno prove el cod de egostar y me realiza lo mismo :(
[IMG]file:///C:/DOCUME%7E1/ADMINI%7E1/CONFIG%7E1/Temp/moz-screenshot-2.jpg[/IMG]


La franja horaria es GMT +2. Ahora son las 07:37:42.

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