Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-05-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
Smile Float a TFMTBCD ......

Estimados:
Bien, tengo un tema que si bien lei por ahi que los campos FMT o BCD cuando se generan en el ClientDataSet, toma por defecto prescion=15 y size 3, para los culaes el size se refiere a la cantidad de decimales, segun el libro de la cara oculta de D6. Ahora, tengo un Field del tipo FMTBCDS el cual le aisgo un valor de una variable float, la variable contiene el valor ej: 8.522234 y al asignarla al campo me queda 8.522, por lo que me genera errores de calculo. el dato es un precio de un art. pero sin el IVA, lo que la mostrarlo con el iva me da diferencia de decimales:
1 x 10 = 10 ((1 X 8.2644) *1.21 )

cuando el multiplicador es menor de 8 todo bien pero cuando es mayor me da error de 0,001/2/3

no se por que cuando le asigno el valor float me trunca los demas decimales despues del trecero.
Alguna sugerencia?????

Gracias

Luis Roldan
Mar del Plata
Argentina
Responder Con Cita
  #2  
Antiguo 24-05-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Hola.

¿No será que en el campo de la tabla tienes definidos 3 decimales?

Saludos
Responder Con Cita
  #3  
Antiguo 25-05-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
hola... gracias por responder, si en la base lo tengo definido como Numeric (15,3), pero esto cuando tenia en uso el BDE no era problema. Ahora veo que si hago 10 /1.21 es decir le saco el iva y se lo vuelo a poner 10*1.21 no me da lo mismo... es un garron....pues ahora me deprecia los digitos despues del tercer decimal

no se me ocurre como solucionarlo...
Responder Con Cita
  #4  
Antiguo 25-05-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
A ver que me estoy perdiendo.

¿Te trunca los valores en variables de memoria o en los campos de las tablas?
Responder Con Cita
  #5  
Antiguo 26-05-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
hago un calculo de un valor real / 1.21 y se lo asigo al campo de la tabla, l valor da como x.123456789 y solo asigna x.123
Responder Con Cita
  #6  
Antiguo 26-05-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Pues claro, si en la tabla tienes un máximo de 3 decimales te lo corta en el tercero, ¿no?
Responder Con Cita
  #7  
Antiguo 26-05-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
si si... esto me complica por que si tengo que tomar un valor de precio sin el iva y debo mostrarlo con el iva incluido, no me dan las cuentas....
Responder Con Cita
  #8  
Antiguo 26-05-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Pues una de dos, o cambias la forma de hacer los cálculos o cambias el tipo del campo de la tabla para poder guardar los decimales que necesites.
Responder Con Cita
  #9  
Antiguo 27-05-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
Bueno:
Algo pra decir es que he descubierto que he tendio este problema hace mucho, lo que psas ahora es que como me trunca los decimales a 3 decimales, no me hace el caculo inverso del IVA por falta de todos los decimales.
Y La verdad no se como corregir
ej
P.UNIT C IVA CANTIDAD TOTAL
1.390 323 448.97

ahora le saco el IVA ( 21%)

1.149 323 371.127 le agrego el IVA (x 1,21)= 449.064

la cuenta no me da... y no se como resolver esto que es parace mas a un tema de resolucion matematica, que de prog. o no se.

Responder Con Cita
  #10  
Antiguo 27-05-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
A ver...

Hay veces que si de un total le sacas la base imponible, la redondeas, le vuelves a calcular el iva y se lo sumas no cuadra con el total original pero eso es matemáticamente así.

Lo que hago yo en estos casos es que si la suma de la base original más el iva no coincide con el total le sumo un céntimo o bien a la base o bien al importe de iva para que cuadre.

Imagino que ese es tu problema.

Saludos
Responder Con Cita
  #11  
Antiguo 27-05-2011
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Ejem, ¿y quien te dice que el valor exacto de 8.522234 es ese?

Es que... los floats, por diseño, no son precisos, se hicieron para que los cálculos matemáticos fueran rápidos, pero insisto, no precisos.

Sin investigar, yo diría que el ClientDataset tendría que coger la precisión y escala del campo de la BBDD, claro, puede ser normal que se definan todos los importes como numeric(15, 3).
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #12  
Antiguo 27-05-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
Estimado Lepe...
no te entendi mucho , pero como puede ser un posible parche a esta situacion?. En el CDS ???? en una ocasion quise limitar los campos pero no me da bolilla. inclusive ahora que me toma como campos los tipo TFMBCD por mas que le ponga 20 de size , me toma 4 ( ahora cambie la base a 4 decimales el numeric(15,4)).
Responder Con Cita
  #13  
Antiguo 27-05-2011
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
La solución es crear/modificar los campos de la BBDD a 6 decimales. Digo 6 porque fué lo que hicieron las compañías telefónicas al entrar el euro. Todas las operaciones monetarias se realizan con 6 decimales y después si hay que redondear, se hace en el último importe.

Al menos en españa, solo se puede redondear el total de una factura, pero ni se te ocurra redondear el importe de un artículo, la base imponible de la factura o cálculos intermedios, porque estarías contradiciendo la ley.

Como ya hace años que andamos con sólo el euro, también puedes poner a True la propiedad Currency que tienen los campos numéricos (es lo que se hace con el dolar desde hace años).

Resumiendo: campos con numeric(15, 6) y Currency a True (para que solo muestre dos decimales y el símbolo del € (propiedad DisplayFormat del campo a ,0.00 €


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
FLOAT de los ... no va! vivamotos C++ Builder 7 05-01-2009 23:15:15
Float y Firebird dvlt Firebird e Interbase 2 26-05-2007 06:29:01
truncar un float federiconqn21 Varios 4 17-01-2006 14:06:08
Problemas con float.... ilichhernandez Varios 2 20-12-2005 16:19:20
Float marianaf Varios 1 24-11-2003 19:44:47


La franja horaria es GMT +2. Ahora son las 14:44:20.


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
Copyright 1996-2007 Club Delphi