PDA

Ver la Versión Completa : problema al convertir valor en edit de forma str a float


jirbert
03-10-2008, 06:29:16
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:

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:

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, 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

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:

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

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:


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, 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/showfiles.php?group_id=45786&package_id=42327&release_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
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.

http://egostar.clubdelphi.com/varios/Format.PNG

Esto es como hago los calculos


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
Hola,

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

http://egostar.clubdelphi.com/varios/Format.PNG

Esto es como hago los calculos


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
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
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


Letras1.Numero := 13254.5;
Letras1.Moneda := 'pesos';
Letras1.Centavos := 'centavos';
ShowMessage(Letras1.AsString);


Usando este valor


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


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 :(
file:///C:/DOCUME%7E1/ADMINI%7E1/CONFIG%7E1/Temp/moz-screenshot-2.jpg

Delphius
03-10-2008, 21:00:57
bueno prove el cod de egostar y me realiza lo mismo :(
file:///C:/DOCUME%7E1/ADMINI%7E1/CONFIG%7E1/Temp/moz-screenshot-2.jpg
jirbert, si deseas poner una imagen debes subirla a un sitio que ofrezca el "alojamiento" de imagenes. Por ejemplo ImageShack (http://my.imageshack.us/). Te creas una cuenta y alli puedes subir tus imagenes y luego mostrarlas aqui.

Saludos,

ContraVeneno
03-10-2008, 21:48:46
bueno prove el cod de egostar y me realiza lo mismo :(
file:///C:/DOCUME%7E1/ADMINI%7E1/CONFIG%7E1/Temp/moz-screenshot-2.jpg
jejejeje, esta estuvo buena, jejeje.

Lo vuelvo a decir por si no se captó la primera vez:

Si utilizas TjvValidateEdit, no tienes que codificar nada de conversiones y no tienes que codificar nada de formatos.

Lepe
03-10-2008, 22:33:42
jejejeje, esta estuvo buena, jejeje.


¿Por qué? No es tan descabellado, algunos foros si suben al servidor las imágenes que se añaden, incluso permite 20 megas por mensaje.

Saludos

jirbert
03-10-2008, 22:44:31
jejejeje, esta estuvo buena, jejeje.

Lo vuelvo a decir por si no se captó la primera vez:

Si utilizas TjvValidateEdit, no tienes que codificar nada de conversiones y no tienes que codificar nada de formatos.

bueno las descargue pero me da error al ejecutar el intaler de jcl me dice lo siguiente:

delphi 6 update 2 is not intalled!!

ContraVeneno
03-10-2008, 23:34:41
pues eso... te falta actualizar tu Delphi 6 con el "Update 2"


algunos foros si suben al servidor las imágenes que se añaden
Nunca me he topado con ninguno que suba las imágenes así directo. :p

egostar
03-10-2008, 23:48:02
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:

De casualidad, no le habrás puesto un limite de caracteres en el Edit :rolleyes::rolleyes::rolleyes: digo a estas alturas todo se vale :D:D:D

Salud OS