![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Otra vez fallos de redondeos.
Hola grupo. Tengo FB 3.0 y dialect 3.
Hago una consulta para sacar la suma por bases imponibles, la cuota y el total de una factura a partir de los detalles que la componen:
Y este es el resultado: Código:
CODIGO PORC_IVA BASE CUOTA_1 CUOTA_2 TOTAL_FACTURA 939006 10.000000 174.55 17.455000 17.450000 192.010000 He buscado por el foro pero no he encontrado una solución a esto, y creo que no debe ser el único que lucha con los redondeos. El problema es que me genera gran cantidad de descuadres en contabilización y totalizaciones. ¿Una ayudita?
__________________
Amar al mundo apasionadamente. |
#2
|
||||
|
||||
A ver si esto te ayuda:
https://docwiki.embarcadero.com/RADS...nding_Routines Hay otros redondeos en Delphi. Si buscas en los foros también encontrarás hilos antiguos donde hemos hablado de esto.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
Gracias Neftali.
Todas las operaciones en delphi están controladas. Los rendondeos los hace correctamente. El problema lo tengo en una vista de firebird, (CREATE VIEW) en SQL. La vista saca totalizada las bases, descuentos, cuotas de iva, cuotas de recargo y el total de la linea. Necesito que la vista saque correctamente el redondeo. Cuando hay un importe con #.#5 y le aplico un 10% de descuento, o un 10% de IVA, el redondeo lo hace como quiere, probad esto:
Devuelve 17.45. No puedo usar las librerías de delphi en SQL. (bajo programa los redondeos están controlados, uso math.simpleRoundTo, o la funcion MyRound que copie de "Casimiro" ). El problema lo tengo en las consultas estadísticas y ahora en contabilidad, que no me coincide la base + iva con el total. Antes tenía grabada la cuota de iva calculada por delphi.... un campo por cada base, porc_iva, cuota, porc_rec y recargo: con 3 tipos de IVA tenía 15 campos... lo quité cuando empezaron con el 5%, 2%, 7.5%.... demasiados campos inútiles a la larga.... ahora sólo tengo base_imponible y total_Factura. Cuando necesito el desglose de IVA lo saco de una VIEW.... EMPEZARON LOS PROBLEMAS. El total de la vista no coincide con el total factura.
__________________
Amar al mundo apasionadamente. Última edición por afxe fecha: 27-02-2025 a las 14:00:22. |
#4
|
|||
|
|||
Prueba así a ver:
Código:
CAST(SUM(PVP * UNIDADES) AS NUMERIC(9, 2)) AS BASE, CAST(SUM((PVP * UNIDADES) * IVA / 100) AS NUMERIC(9, 2)) AS IMPIVA, CAST(CAST(SUM(PVP * UNIDADES) AS NUMERIC(9, 2)) + CAST(SUM((PVP * UNIDADES) * IVA / 100) AS NUMERIC(9, 2)) AS NUMERIC(9, 2)) AS TOTAL |
#5
|
||||
|
||||
Sería necesario saber exactamente qué datos tienes en ese campo, porque no me cuadra que no redondee correctamente, jamás tuve ese problema.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#6
|
||||
|
||||
Prueba esto....
Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#7
|
||||
|
||||
Cita:
Esto es algo que hay considerar: * No asumas que tipo de datos es un literal ('174.55') sin leer la documentación * Hacer a ciegas ` AS NUMERIC(9, 2)` hace un `cast` que cuando es de `alto a bajo` es un `corte`. Osea es malo. No es redondear! * Cuando tienes datos que se trabajan en multiples lenguajes/bd asegurare que *realmente* estan verdaderamente alineados. que son tipos realmente *equivalentes* en vez de ser *similares*. Fíjate en los docs que tengan los mismo exactos rangos. Por ultimo, yo considero que siempre tienes que tener una UNICA fuente de LA VERDAD. O haces redondeos siempre en Firebird, o siempre en Delphi. En mi caso, yo guardo todo los datos calculados en la bd (ie: Los cálculos los hago siempre en Rust, en vez de en Postgres), ya que hay reglas dinámicas para determinar cuando se aplica o no los impuestos (antes o después de los descuentos por ejemplo), así que no puedo hacer cálculos simples en la bd:
Y nunca hago `ROUND` en la bd, porque eso es en mi opinion 'presentacional', ósea, es algo que se configura similar a cual idioma y cual símbolo de moneda se usa. Todo es exacto en la bd (nota como yo no pongo un corte de cuantos decimales aquí, que es un problema el día que tengas que manejar varios países. Japón por ejemplo no usa decimales!) y a la hora de `reportes` se toma esa decisión.
__________________
El malabarista. Última edición por mamcx fecha: 28-02-2025 a las 15:27:34. |
#8
|
|||
|
|||
Cita:
Gracias a todos por vuestro interés.
__________________
Amar al mundo apasionadamente. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema con redondeos en doubles | briast | OOP | 3 | 05-04-2012 11:10:16 |
Redondeos y no redondeos | vivamotos | C++ Builder | 6 | 12-06-2010 00:29:48 |
Redondeos con Firebird 2.0 | Jose_T | Firebird e Interbase | 12 | 19-01-2007 19:57:02 |
problemas con float y redondeos | wonder boy | Firebird e Interbase | 17 | 27-12-2005 20:59:06 |
Problemas con Redondeos | AGAG4 | Varios | 4 | 14-11-2005 23:38:44 |
![]() |
|