Suma con dos decimales

Por medio de una consulta necesito calcular el porcentaje de una cifras con origen de una tabla, formato doble 2 dec (euro).(Calculo de un descuento)
Como preciso dos decimales, vuelvo a signar este valor en el formato doble.
Cuando me halla el resultado, este figura con dos decim. Pero lleva más internamente al situarme en la casilla.
El problema es que al sumar la columna en un informe no se ajusta a la cifra que se ve. Porque me suma todos los decimales que lleva internamente y no respeta lo que se ve, creando confusión si lo sumamos. ¿Existe alguna función como en "excel""precisión de pantalla" que suma y opera lo que esta en pantalla o en informe?

1 respuesta

Respuesta
1
El problema que me planteas es frecuente en Access 97. De hecho, es extraño que Microsoft no haya previsto la posibilidad utilizar la 'Precisión de pantalla' como en Excel. Es más, ni siquiera Access 97 dispone de una función tan esencial como REDONDEAR.
Yo no he tenido más remedio que fabricar mi propia función REDONDEAR, la cual se puede llamar desde casi cualquier sito, es decir, desde una consulta, desde el propio código, en un control calculado de un formulario o informe, etc.
A continuación de paso la función que deberás copiar en un módulo estándar de Access.
Function Redondear(pEntrada, pDecimales)
On Error GoTo Err_Redondear
Dim vInterno
vInterno = pEntrada * 10 ^ pDecimales
vInterno = Int(Abs(vInterno) + 0.5) * Sgn(vInterno)
Redondear = vInterno / 10 ^ pDecimales
Exit Function
Err_Redondear:
Redondear = 0
End Function
La utilización de esta función requiera, como en Excel, de dos argumentos. El primero es el número que se quiere redondear. El segundo es el número de decimales.
Puedes usar esta función en un campo calculado de una consulta, por ejemplo:
Resultado:Redondear([Campo1]*16/100;2)
Eso crearía un campo calculado llamado RESULTADO cuyo valor sería igual al 16% del Campo1 redondeado a dos decimales.
Pruébalo y verás como funciona.
Nuevamente Hola Paco:
Veo que has captado fenomenalmente mi problema y es desde hace bastante tiempo una obsesión por resolver.
Es la primera vez que trabajo con módulos y he seguido fielmente tu consejo editando uno con todas las lineas, titulado "Redondear"
Cuando ejecuto una consulta de la forma que me indicas me aparece un mensaje (La Funcíon ´Redondear´no esta definida en la expresión)
? ¿Dónde tengo el fallo para que no encuentre el modulo o la función?
Por favor ayudame
Gracias Eduardo
Voy a tratar de explicarte, paso por paso, todo lo que tienes que hacer para que la función funcione, valga la redundancia.
Veamos, sigue estos pasos:
1.- En la ventana "Base de datos" pulsa la ficha "Módulos" y después pulsa en el botón "Nuevo". Con esto aparecerá una ventana de módulo.
2.- Copia la siguiente función y pégala en el Módulo que has abierto.
Function Redondear(pEntrada, pDecimales)
On Error GoTo Err_Redondear
Dim vInterno
vInterno = pEntrada * 10 ^ pDecimales
vInterno = Int(Abs(vInterno) + 0.5) * Sgn(vInterno)
Redondear = vInterno / 10 ^ pDecimales
Exit Function
Err_Redondear:
Redondear = 0
End Function
3.- Cierra la ventana de Módulo y, cuando te salga un cuadro de diálogo preguntándote si deseas guardar los cambios en el diseño del módulo, pulsa el botón "Sí", con lo cuál se te pedirá un nombre. Puedes ponerle por ejemplo el nombre "Funciones especiales" o cualquier otro nombre, el que tú quieras.
4.- Después, abres tu consulta en modo diseño y creas un campo calculado con el esquema que ya te expliqué, es decir,
NombreDelCampoCalculado:Redondear([Campo1]*16/100;2)
Esto es sólo un ejemplo. Realmente esta función se puede utilizar para muchas cosas. El siguiente ejemplo sirve para obtener el resultado en Euros de un importe en pesetas.
CampoCalculadEnEuros:Redondear([CampoPesetas]/166,386;2)
Bien. Espero que esto te haya servido de ayuda. Ya me contarás cómo te ha ido.
Amigo Paco:
A tu salud estoy brindando, por lo bien que me has resuelto el problema, ya que tras diversas consultas a amigos y otros, no han sabido interpretar o bien no conocían la solución, que como te comente ya lo tenía como una obsesión.
Eres un tío muy bueno por no decir cojo...
Gracias, muchas gracias
Eduardo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas