![]() |
operaciones con números float.
Hola.
¿Hay alguna forma de fijar en las operaciones con números float que sólo se utilicen dos decimales sin utilizar funciones de redondeo? Necesito operar con euros donde sólo se visualicen dos números decimales. Con más detalle el problema es el siguiente: Tengo una serie de lineas de detalle donde el importe es un campo calculado: bi:= RoundTo(DetCANTIDAD.Value*DetPVP.Value, -2) dt:= RoundTo(DetDESCUENTO.Value / 100 ) * Basimponible,-2); DetccImporte.Value := bi - dt; El total lo muestro utilizando un campo Agregado cuya expresión es: SUM(Cantidad*pvp-((descuento/100)*Cantidad*PVP)) Problema: La suma no es exacta por los decimales y el redondeo. ¿Cómo solucionais los totales de un conjunto de lineas de detalle? Saludos y gracias. |
Para eso yo me hice una función:
Un Saludo. |
Yo lo que haría sería sumar todos los totales de línea. El problema es que no es lo mismo (10+16%) + (10+16%) que (20+16%). Se va en algunos casos de 0,1 centimos de euro, y con el redondeo a veces se ve. De todas formas, si usas tres decimales para los precios y subtotales, falla bastante.
Resumiendo, no cojas el total sin Iva y sin descuento y le apliques los porcentajes. Suma los totales parciales por linea. Saludos del elfo |
Cita:
Hasta luego. ;) |
Así es como lo hago: roundto(valor, -2). Pero como trabajo con el campo agregado. Si los sumo yo no tengo problema, el problema es que en la expresión del campo agregado no es posible utilizar la función roundto.
|
Bueno si utilizas bases de datos (que asi parece) IB o FB puedes utilizar alguna libreria UDF que hay varias y free, o puedes usar variables Numeric o Decimal.
Estoy de acuerdo con ELfoscuro cuando sugiere en primero calcular los parciales para luego sumar el total a partir de estos. Saludos, JOSEPE Lima-Peru |
Podrias tener un campo calculado que ya haga el redondeo, y luego el agregado hacerlo sobre el campo calculado.
Hasta luego. ;) |
El problema es que esta función no está dispnible en Delphi 5 y versiones inferiores. Si existe en D7 y no sé en D6, yo debo reconocer que la cree para una versión de Access en que se les olvidó poner la opción redondeo y luego la adapté a Delphi 3 y hasta D5 la he venido utilizando sin ningún problema. Un Saludo. |
RoundTo está disponible al menos a partir de Delphi 6 en la unidad Math.
Supongo, aunque no tengo forma de probarlo, que esta unidad puede integrarse a proyectos de versiones inferiores de delphi (al menos de d4 en adelante). Hasta luego. ;) |
Tal como dice la ayuda de delphi 6 para RoundTo:
Cita:
SetRoundMode(rmup); Y ahora si: edit6.Text:= FloatToStr(roundto(1.245,-2)); // obtines 1.25 Aunque he notado que se pueden perder millonésimas de euro. En cantidades de 3.000 € se ve un fallo de 1 centimo. Un saludo |
floats
Gracias por el empeño.
Pero el problema lo tengo en el campo agregado. ¿Alguién utiliza un campo agregado para calcular el total de un conjunto de lineas de detalle con descuentos? Utilizando la función RoundTo y creando una función propia que calcule el total el problema está resuelto, pero creo que es más cómodo y elegante el uso de un campo agregado (si hay alguna manera de hacerlo, claro) Saludos. |
La franja horaria es GMT +2. Ahora son las 00:24:33. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi