Problema con el redondeo en campos calculados
Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84586
Fecha de impresión: 26/Marzo/2026 a las 17:28
Tema: Problema con el redondeo en campos calculados
Publicado por: pascual14
Asunto: Problema con el redondeo en campos calculados
Fecha de publicación: 02/Julio/2019 a las 08:59
|
Hola amigos, estoy teniendo un problema con los campos calculados. Tengo varios campos calculados en una tabla que guarda el cuerpo de los albaranes. Ahí ya sabéis que hay sumas, restas, multiplicaciones etc. Yo tengo los campos calculados que devuelvan un formato moneda con 2 decimales y lo hace bien, pero solo cuando veo el resultado, pero si pincho dentro me pueden aparecer mas de 2 decimales. Por ejemplo si tengo 8,9 unidades a un precio de 1,45€ el resultado es 12,91€ pero si pincho en ese campo lo que tiene es 12,905€. Cual es el problema, pues que luego al sumar la base de un albarán, a veces da un resultado con una diferencia de 1 céntimo y eso no puede ser. He intentado todo pero ya no sé cómo hacerlo. Con round me redondeaba hacia abajo y no me servía. No sé como hacer esto. Si alguien sabe como solucionar este problema. Gracias.
|
Respuestas:
Publicado por: Parche
Fecha de publicación: 02/Julio/2019 a las 09:25
|
Hola,
No sé si te servirá, pero ¿y si pones en todos los campos que quieras resultados los mismos decimales? 2 ó 3 decimales para que siempre sea el mismo importe en todos los sitios.
Saludos.
|
Publicado por: pascual14
Fecha de publicación: 02/Julio/2019 a las 14:34
|
Hola, eso ya lo tengo hecho, todos igual, pero no hace caso. Le digo que me devuelva un campo moneda con 2 decimales pero me guarda 3 o 4, no sé por que access hace estas cosas. Gracias.
|
Publicado por: Mihura
Fecha de publicación: 02/Julio/2019 a las 16:05
|
Una cosa es lo que guarda Access y otra lo que muestra.
El campo moneda, específico para esto trabaja con 4 decimales siempre, si quieres que tenga menos hay que redondear.
La función Redondeo de Access no es como la nuestra, lo suyo es que te fabriques una a tu medida, ... de todas formas si andas 'vago' de neuronas  en el foro hay varios ejemplos de como hacerla.
Un saludo.
------------- Jesús Mansilla Castells. Saludos desde Móstoles.
http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones http://www.tecsys.es" rel="nofollow - Tecsys.es
|
Publicado por: pascual14
Fecha de publicación: 02/Julio/2019 a las 17:37
|
Hola Mihura ¿pero no estaba de vacaciones? lo tuyo es vicio jejej. A estas te refieres? Public Function Redondea(dblnToR As Double, Optional intCntDec As Integer) As Double Dim dblPot As Double Dim dblF As Double If dblnToR < 0 Then dblF = -0.5 Else: dblF = 0.5 dblPot = 10 ^ intCntDec Redondea = Fix(dblnToR * dblPot * (1 + 1E-16) + dblF) / dblPot End Function
o bien esta otra
Public Function Redondea(Numero As Double, decimales) As Double Redondea = Sgn(Numero) * Fix(Abs(Numero) * (10 ^ (decimales)) + 0.5) / (10 ^ (decimales)) End Function
|
Publicado por: Mihura
Fecha de publicación: 02/Julio/2019 a las 18:14
|
Por ejemplo la segunda ...
¿Vacaciones? ... ¿eso que es? 
------------- Jesús Mansilla Castells. Saludos desde Móstoles.
http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones http://www.tecsys.es" rel="nofollow - Tecsys.es
|
Publicado por: Maverick2019
Fecha de publicación: 04/Julio/2019 a las 09:58
HolaHabía un artículo muy bueno al respecto (kb 196652), pero se lo han cepillado  En su lugar, he encontrado esto: https://answers.microsoft.com/es-es/msoffice/forum/all/redondeo/df0d58ff-11d6-40db-9137-a4ea0ea3fe73" rel="nofollow - https://answers.microsoft.com/es-es/msoffice/forum/all/redondeo/df0d58ff-11d6-40db-9137-a4ea0ea3fe73 ¿Que versión de Access utilizas?
Salu2,
|
Publicado por: guarracuco
Fecha de publicación: 04/Julio/2019 a las 14:45
|
Hay un modelo que plantea el método de pago Square el cual llama mucho mi atención y podría ser una solucion. Por nombrar solo una de las ventajas, se evitan el problema de separador de decimales que difiere según configuración del equipo. En su lugar, truncan dos decimales y multiplican por 100 y tratan con un entero. Esto también puede ser útil en las cadenas sql, ya que nos evitaría enmascarar columnas con decimales.
|
Publicado por: Maverick2019
Fecha de publicación: 04/Julio/2019 a las 15:52
|
Hola Guarracuco. ¿Tienes algún link con información al respecto? Gracias.
Salu2,
|
Publicado por: pascual14
Fecha de publicación: 04/Julio/2019 a las 17:22
|
Hola uso prácticamente todas, pues mis clientes tienen de todo, 2010, 2013, 2016 y yo 2019.
|
Publicado por: Maverick2019
Fecha de publicación: 04/Julio/2019 a las 17:26
|
Hola El artículo que mencioné antes lo encontré aquí: https://jeffpar.github.io/kbarchive/kb/196/Q196652/" rel="nofollow - https://jeffpar.github.io/kbarchive/kb/196/Q196652/
Salu2,
|
Publicado por: pascual14
Fecha de publicación: 04/Julio/2019 a las 19:01
|
Que locura con el redondeo. La segunda función no va bien. La cantidad 24,125 me la redondea a 24,12 pero es curioso que la cantidad 23,125 si que la redondea bien a 23,13. Voy a probar con la primera función.
|
Publicado por: Maverick2019
Fecha de publicación: 04/Julio/2019 a las 19:21
Hola. Si, dependiendo de que tecnología implemente el redondeo, lo puede hacer de una manera u otra 😔
|
Publicado por: pascual14
Fecha de publicación: 04/Julio/2019 a las 20:18
|
Haciendo mil comprobaciones veo que es por la precisión decimal, en algunos cálculos devuelve un resultado con 3 decimales como 24,125 pero en otros devuelve mas cómo 24,1249990463257 y de ahí el por qué unos redondea por exceso y otros por defecto. Estos haciendo pruebas haciendo los cálculos en consultas con format(numero;"Moneda") y va redondeando bien. A ver cuando termine de comprobar...
|
Publicado por: guarracuco
Fecha de publicación: 04/Julio/2019 a las 21:00
Maverick2019 escribió:
Hola Guarracuco.¿Tienes algún link con información al respecto? Gracias.
Salu2, |
Hola Maverick. No hay mucho que leer al respecto en su documentacion. Simplemente la unidad monetaria esta basada en centimos. Antes de mostrar/ imprimir y hacer calculos, dividen el monto entre 100 y listo.
|
Publicado por: guarracuco
Fecha de publicación: 05/Julio/2019 a las 05:03
https://developer.squareup.com/docs/api/connect/v2#type-money
|
Publicado por: pascual14
Fecha de publicación: 05/Julio/2019 a las 11:50
|
Y al final he conseguido que todo me cuadre. He tenido que pasar de los campos calculados y he creado una consulta que calcule los totales, es decir en las tablas solo tengo cantidad, precio y descuento. En las consultas hago el cálculo del total, el descuento, etc. ¿Como me lo ha redondeado bien? con format(numero,"Moneda") y ahí me ha dejado todo a 2 decimales y redondeado de forma correcta. Seguramente no es la mejor forma, pero llevo 3 días con el dichoso redondeo y ahora no tengo mas ganas de darle vueltas. Como bien dijo Mihura, lo mejor es tener los campos en las tablas pero no calculados, y desde el formulario de introducción de datos hago el cálculo y lo paso ya redondeado o como quiera yo a la tabla y luego en la consulta sumo. Eso para mas adelante. Gracias por la ayuda. Podéis cerrar el hilo.
|
|