![]() |
Tipo de datos apto para cálculos monetarios
Saludos camaradas, mi pregunta es muy sencilla:
¿Qué tipo de dato es apropiado para almacenar cantidades monetarias en interbase y firebird? Eso es todo... Gracias por sus respuestas. |
|
Hola,
Pues yo uso campos tipo float, no causan problemas a la hora de hacer calculos y para la parte visual ($ 1.000) uso el DisplayFormat :) |
Yo uso Numeric(15, 2) y/o Double Precision, realmente en el ultimo que pienso es en el Float, ya que realmente me sucedieron varios disparates con él.
|
Cita:
Saludos. |
yo utilizaba el Float... pero me dio muchos problemas... tanto para la parte visual como el manejo de algunos numeros que no me aceptaba o me los cambiaba... creo que deje algunos post con lo anterior (Interbase)...
cuando se muestra el valor por un DBGrid de un dato que es Float se ve 1588.23999023438 y lo que me debe mostrar es el 1588.24... lo raro es que cuando lo imprimo me aparece bien... pero en fin... el otro problema lo tube con un valor de 127 millones y algo... que la cifra que ingrese no me la aceptaba, y realice varias pruebas y habian 3 o 4 numeros consecutivos que no los tomaba y los cambiaba... pense que era el tope, pero si ponia un numero superior si lo aceptaba... así que me cambie al numeric...bueno,,, todo esto en Interbase 6 Salu2:p:D |
Pues yo para la parte visual siempre usaba el DisplayFormat.
|
Cita:
|
|
Ahora que lo pienso :rolleyes:, si he tenido errores como el que planteas amigo BlueSteel en el primer hilo que mencionas; creia que eran los decimales, me ha pasado de que cuando hago un sum() en una tabla de unos 30.000 registros este me incrementa unos cuantos numeros (Ej: 21.536.450 = 21.536.472) mas o menos, aunque no me implica mayor complicacion en el momento si es de tener en cuenta este pequeño pero molesto detalle para otras eventualidades, ire estudiando los numeric y double precision ;)... algo nuevo para aprender.
|
Hola familia.
Bueno creo que los tipos de datos ofrecidos por Interbase / Firebird son suficientes para todas las necesidades en nuestros sistemas, no comparto que motores de bases de datos como mySQL tienen una cantidad exagerada de tipos de datos. Me parece que debemos utilizar para operaciones monetarias un decimal (15,2) pues permite manejar 2 decimales de precision que es lo que normalmente en los sistemas de gestion (contabilidades por ejemplo) se utiliza, o alguno de ustedes ha visto un cheque con tres cifras en la parte decimal ?, pues yo no lo he visto. Los float son para calculo cientifico donde necesitamos manejar cantidad de digitos en la parte decimal, ademas, he observado que quienes utilizan float para sistemas de gestion, cuando se hacen sumatorias encuentran diferencias por la forma en que se maneja el redondeo. |
Yo ya había probado con float, pero eso de los decimales me deja consternado, quizás en definiticva el valor más apropiado para cálculos monetarios se el Decima(15,2).
Gracias por sus respuestas compañeros |
aumentar algo a todo esto (ojala haya leido todo) , les comento yo uso numeric(15,2) pero aun me siguen apareciendo esos numeros raros de decimales pero cambie el dialecto a 3 y hay funcionan bien pero cuando quiero crear una nueva tabla y creo un valor integer me sale un error en mi programa diciendo que es de tipo big integer y no me deja trabajar , utilizo firebird 1.5 , delphi 6 e IBX
|
como IVAND yo tambien cambie a numeric(9,2).
con float he tenido (y tengo) muchos problemas de redondeo. pero para un nuevo programa cree la base de datos firebird en dialect 3, desde su inicio y los campos para moneda en numeric(9,2) y no he tenido problemas de redondeo. los tengo en tablas anteriores aunque cambie a dialect 3. segun vi en post anteriores, en dialect 1 es DOUBLE PRECISION y en dialect 3 es INT64 (un integer datatype).se tienen errores de redondeo en dialect 1 la base de datos la cree con IBExpert |
Hola amigos ya leí varios temas y este es el que mas se acerca a lo que quiero, tengo el también el problema con los decimales, uso el tipo de dato decimal(15,2) el cual me funciona muy bien, el problema que tengo es a la hora de comparar 2 cantidades de un calculo con estos datos, las tablas que tengo son ventas y abonos.
tabla ventas .... id integer, subtotal decimal(15,2), pimpuesto decimal(15,2), impuesto computed by (subtotal * impuesto / 100), total computed by (subtotal + impuesto), ...... p/e: id = 1 subtotal = 142.90 pimpuesto = 15 impuesto = 21.435 total = 164.335 en delphi con la propiedad displayformat el total lo muestro como $164.30 tabla abonos ....... id_venta integer, monto decimal(15,2) ....... p/e: id_venta = 1 monto = 164.30 visualmente esta bien el cliente me pago la cantidad correcta de la venta, pero el problema se presenta al hacer una vista en base a la siguiente consulta para saber cuanto me deben mis clientes:
para este ejemplo me dice que este cliente me debe 0.035, cuando no debe de ser así porque trunque el total, alguien me puede decir como debo de filtrar mi consulta para que estas diferencias tan chicas las elimine o en el campo saldo me ponga 0 gracias |
| La franja horaria es GMT +2. Ahora son las 01:39:30. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi