FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
Hola.
¿No será que en el campo de la tabla tienes definidos 3 decimales? Saludos |
#3
|
|||
|
|||
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... |
#4
|
||||
|
||||
A ver que me estoy perdiendo.
¿Te trunca los valores en variables de memoria o en los campos de las tablas? |
#5
|
|||
|
|||
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
|
#6
|
||||
|
||||
Pues claro, si en la tabla tienes un máximo de 3 decimales te lo corta en el tercero, ¿no?
|
#7
|
|||
|
|||
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....
|
#8
|
||||
|
||||
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.
|
#9
|
|||
|
|||
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. |
#10
|
||||
|
||||
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 |
#11
|
||||
|
||||
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. |
#12
|
|||
|
|||
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)). |
#13
|
||||
|
||||
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. |
|
|
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 |
|