Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Caso Raro de Decimales en campo de tipo Flotante (https://www.clubdelphi.com/foros/showthread.php?t=40526)

AGAG4 20-02-2007 02:22:05

Caso Raro de Decimales en campo de tipo Flotante
 
Uso FibPlus 6.3, Firebird 1.54
Buen día compañeros, les platico mi problema que en mi punto de vista esta super raro, tengo un maestro detalle y un dbGrid, este último lo enlazó al Detalle por medio de su propiedad datasource, ahora bien, tengo 3 campos de tipo Flotante, en donde formateo cada campo dentro del fibDataSet, en su propiedad :
DisplayFormat le asignó el valor ###,###,##0.00000
EditFormat le asignó el valor ########0.00000

Ahora, todo marcha a la perfección, el usuario captura datos a dichos campos, hasta que por arte de magia capturaron 152.40 al darle enter se mostró 152.39999 :eek: , al seguir haciendo pruebas capturo cualquier cosa que se me ocurra por ejemplo:
50.10 me lo deja en 50.10000
10.00 me lo deja en 10.00000
10.10 me lo deja en 10.10000
152.10 me lo deja en 152.10000
152.20 me lo deja en 152.20000
152.30 me lo deja en 152.30000
152.50 me lo deja en 152.50000

Que estará pasando aqui ?????
Agradezco cualquier sugerencia....

Lepe 20-02-2007 12:37:29

Cita:

152.40 al darle enter se mostró 152.39999
Los flotantes siempre tendrán un número distinto de decimales al que tu especificas, por la forma en que están implementados.

Usa Numeric(10,2) en dialecto 3, de esa forma obligas a FB a usar un Int64 para representar los números decimales y no obtendrás esos errores.


Cita:

152.10 me lo deja en 152.10000
Esto es normal, ya que le dices que quieres ###,###,##0.00000 (5 decimales), la máscara para 2 decimales suele ser ,#0.00 eso añade las comas como separador de millar y el punto como decimal (como ves, solo indico 2 ceros... 2 decimales).

Saludos

AGAG4 20-02-2007 19:00:46

Gracias Lepe
 
Gracias Lepe, funcionó a la perfección, pero ya recorde porque los tenía de tipo flotante, antes los tenia de tipo Numeric, pero los deje de tipo flotante porque uso para imprimir el ZReport y si cambio de Flotante a Numeric ya no muestra los datos de los campos donde hice dicha modificación y si cambio de Numeric a Flotante dentro del ibExpert refresco la tabla para que tome los tipos de datos nuevos y al mandar a imprimir por pantalla ya me aparece los datos, ese fue el motivo del cambio....

Agradezco algun comentario al respecto.

Lepe 20-02-2007 19:22:11

intenta engañar a ZReport.

Abres una consulta con los campos, ahora recorres FieldDefs y cambia el tipo de cada campo a Float (Fieldtype a ftFloat), por último intenta asociarlo al ZReport.

Esto se llama jugar sucio... pero ojalá dé resultados ;).

Saludos

AGAG4 21-02-2007 01:42:00

ok
 
Gracias Lepe, me funciono con cambiarle al tipo de dato DOUBLE PRECISION el problema es que la BD se inchará mas rápido, voy a probar tu consejo....
Que tengas buen día.

AGAG4 21-02-2007 18:27:46

Cita:

Empezado por Lepe
intenta engañar a ZReport.

Abres una consulta con los campos, ahora recorres FieldDefs y cambia el tipo de cada campo a Float (Fieldtype a ftFloat), por último intenta asociarlo al ZReport.

Esto se llama jugar sucio... pero ojalá dé resultados ;).

Saludos

Ya hize pruebas a como me explica:
Código Delphi [-]
   //Caso 1
    zrReport.DataSet := Nil;
    for x:=0 to Query.FieldCount - 1 do
      if (Query.Fields.Fields[x].DataType = ftFMTBcd) then
        Query.FieldDefs[x].DataType := ftFloat;

    zrReport.DataSet := ibQuery;
   

   //Caso 2
    zrReport.DataSet := Nil;
    for x:=0 to Query.FieldCount - 1 do
      if (Query.Fields.Fields[x].DataType = ftFMTBcd) then
        Query.FieldDefs[x].DataType := ftBCD;
 
    zrReport.DataSet := ibQuery;
En ninguno de los 2 casos funciono.... :eek:


La franja horaria es GMT +2. Ahora son las 20:16:33.

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