problemas con decimales al insertar en tabla
Buenas amigos,
La verdad no se donde puede estar el problema. Tengo una tabla que tiene un campo decimal(4,2) le escribo en un edit 5.38 y me lo guarda como 5.37. Ya probe a hacer
le puse 5.38, lo convierto y lo vuelvo a mostrar con el showmessage y me marca 5.38, pero a la hora de guardarlo me pone 5.37. Ya probe a añadirlo directamente con un dbgrid y no hay problema, me pone 5.38. No me pasa con todos los numeros, solo con algunos, por alguna razon a la hora de escribir en la tabla lo redondea o nose, porque si le pongo en el edit, por ejemplo 5.388 si me guarda 5.38. Ya revise el query por si habia algo en las propiedades pero no lo encontre. y la cosa esta rara :(. alguno sabe por donde puedo mirar? |
Hola anubis.
Puede producirse por el tipo definido en la creación de la tabla o por el modo de asignación que estas haciendo al componente. Te aconsejo usar tipos escalados en la definicion de la tabla: Usando NUMERIC y DECIMAL. Y desde Delphi usar el tipo Currency de este modo:
Saludos :) |
si gracias por responder pero use decimal(4,2), el problema ahora es mayor proque si cambio el asfloat por ascurrency, ademas de haber cambiado en el query
donde campo6 es del tipo currencyfield y el campo3 es floatfield, ahi el currency da error de violacion. Pense que si cambiaba el floatfield por currencyfield era lo mismo. |
Bueno el tema del currency la verdad nose porque no funciona asignandolo a currency, sale un aviso de operacion de coma flotante invalida.
Ya habia hecho un miniprograma de una base de datos ejemplo para probar todo esto y al final tuve que cambiar el tipo decimal(4,2) por numeric(6,2), pense que la decimal era de mas precision que la numerica, pero bueno ya quedo bien el tema gracias |
Me extraña el asunto siendo decimal el campo, no sé tampoco que sistema gestor de bd estas utilizando. Yo siempre le echo la culpa al paso de decimal a binario cuando me pasan estas cosas con algunos números y con otros no. Entonces compruebo si al pasar de decimal a binario dan un valor exacto en binario o son periódicos. Cuando es un decimal exacto y en binario también no hay problema pero cuando en binario pasa a ser periodico me pasan estas cosas asi que al final siempre acabo redondeando a mano a los decimales que necesito los campos que leo de la bd. Mis investigaciones al respecto me han llevado a la conclusión de que la mayoria de las bd guardan en binario los datos númericos y cuando estos son flotantes pueden surgir este tipo de problemas.
|
gracias por contestar.
uso firebird y la verdad tampoco entiendo porque hace eso, aun probando en un base de datos nueva de ejemplo. pero bueno ya pude cambiar a numeric y funciona pero no deja de ser extraño |
Ecfisa tienes un privado. Gracias!
|
La franja horaria es GMT +2. Ahora son las 16:13:45. |
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