Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Tipo de datos apto para cálculos monetarios (https://www.clubdelphi.com/foros/showthread.php?t=57870)

Faust 30-06-2008 22:29:32

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.

RolphyReyes 01-07-2008 13:33:40

Saludos.

Revisa este post:
http://www.clubdelphi.com/foros/show...ighlight=money

felipe88 01-07-2008 15:01:38

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

jhonny 01-07-2008 15:12:59

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.

enecumene 01-07-2008 15:18:53

Cita:

Empezado por jhonny (Mensaje 297416)
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.

Qué extraño amigo Johnny, yo siempre he usado Float y nunca me ha dado problemas, sí me ha dado problemas para calculos es el númeric por la coma.

Saludos.

BlueSteel 01-07-2008 15:47:49

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

enecumene 01-07-2008 15:55:52

Pues yo para la parte visual siempre usaba el DisplayFormat.

felipe88 01-07-2008 16:00:42

Cita:

Empezado por BlueSteel (Mensaje 297429)
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

Bueno eso es algo importante, no tenia idea de los problemas que podria causar (Claro no se si en Firebird sea lo mismo), hasta ahora el unico tipo de dato que me causa problemas es el de fecha:rolleyes:... pero bueno eso no va al caso.

BlueSteel 01-07-2008 18:32:59

bueno... corrigo... no eran con 127 millones.. el error ocurria con 27 millones ($27.220.415)

aquí dejo el hilo (Problema con campo Float en Interbase )

y aquí dejo otro hilo donde realizo una pregunta muy parecida.... ( tipos de datos...cual escojo ? )

salu2:p:D

felipe88 01-07-2008 21:05:18

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.

lbuelvas 02-07-2008 01:26:15

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.

Faust 03-07-2008 03:52:09

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

IVAND 10-07-2008 19:08:37

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

gmontes 10-07-2008 21:06:32

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

jzginez 23-07-2008 19:37:01

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:
Código SQL [-]
 select ventas.id, ventas.total, (select sum(abonos.monto) from abonos where abonos.id_venta = ventas.id)) abonos, (Ventas.total - (select sum(abonos.monto) from abonos where abonos.id_venta = ventas.id))) saldo
from ventas

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