** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Problema con el redondeo en campos calculados
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoProblema con el redondeo en campos calculados

 Responder Responder Página  12>
Autor
Mensaje
pascual14 Ver desplegable
Colaborador
Colaborador


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 530
Enlace directo a este mensaje Tema: Problema con el redondeo en campos calculados
    Enviado: 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.

Arriba
Parche Ver desplegable
Habitual
Habitual


Unido: 03/Julio/2018
Localización: Alicante
Estado: Sin conexión
Puntos: 170
Enlace directo a este mensaje Enviado: 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.
Arriba
pascual14 Ver desplegable
Colaborador
Colaborador


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 530
Enlace directo a este mensaje Enviado: 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.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 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 LOL en el foro hay varios ejemplos de como hacerla.

Un saludo.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
pascual14 Ver desplegable
Colaborador
Colaborador


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 530
Enlace directo a este mensaje Enviado: 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
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 02/Julio/2019 a las 18:14
Por ejemplo la segunda ... 

¿Vacaciones? ... ¿eso que es?  LOL
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 04/Julio/2019 a las 09:58
Hola
Había un artículo muy bueno al respecto (kb 196652), pero se lo han cepillado Cry
¿Que versión de Access utilizas?

Salu2,
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 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.

Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 04/Julio/2019 a las 15:52
Hola Guarracuco.
¿Tienes algún link con información al respecto?
Gracias.

Salu2,
Arriba
pascual14 Ver desplegable
Colaborador
Colaborador


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 530
Enlace directo a este mensaje Enviado: 04/Julio/2019 a las 17:22
Hola uso prácticamente todas, pues mis clientes tienen de todo, 2010, 2013, 2016 y yo 2019.
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 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/

Salu2,
Arriba
pascual14 Ver desplegable
Colaborador
Colaborador


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 530
Enlace directo a este mensaje Enviado: 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. 
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 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 😔
Arriba
pascual14 Ver desplegable
Colaborador
Colaborador


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 530
Enlace directo a este mensaje Enviado: 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...
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 04/Julio/2019 a las 21:00
Publicado originalmente por Maverick2019 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.


Editado por guarracuco - 04/Julio/2019 a las 21:00
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable