Buenas tardes:
Vuelvo sobre este tema porque nuevamente tuvimos inconveniente con el promedio de dos alumnos, que calculados con Calculadora o con Excel (control que realiza la gente de Rectorado antes de emitir un título) dan un valor y G3 otro diferente. Nos encontramos en versión 3.18.1.
Coincido con Emilio que el problema es que se redondea 2 veces (no explícitamente, sino que el primer redonde CREO que lo hace el motor para poder almacenar un valor con muchos decimales en una variable de 3 decimales). Paso a explicar el análisis con el ejemplo de uno de nuestros casos:
El promedio calculado resulta en 9.38 mientras que G3 informa 9.39
La primer parte de la función f_promedio, crea y carga una tabla temporal con las actividades del alumno sobre las cuales se va a calcular el promedio, luego realiza la suma de las notas y cuenta la cantidad de las mismas:
SELECT SUM(e.valor_numerico), COUNT(*)
INTO _total_notas, _cantidad_actividades
FROM _Tactividades as t,
sga_escalas_notas_det as e
WHERE (pConAplazos = 'S' OR (pConAplazos = 'N' AND t.resultado = 'A'))
AND
t.nota IS NOT NULL
AND e.escala_nota = t.escala_nota
AND e.nota = t.nota
AND e.valor_numerico IS NOT NULL;
El resultado en nuestro ejemplo es:
_total_notas = 366.000
_cantidad_actividades = 39
La division de ambos valores se asigna a la variable _promedio que está declarada con 3 decimales
_promedio := _total_notas / _cantidad_actividades;
Allí es donde entiendo que se realizaría el primer redondeo, si bien el número resultante es 9,3846154, aparentemente queda almacenado como 9.385.
La función devuelve dicho valor redondeado a 2 decimales
RETURN ROUND(_promedio,2);
El resultado es 9.39
Posibles soluciones:
1-Declarar _promedio con más decimales
2- RETURN ROUND(_total_notas / _cantidad_actividades,2) sin utilizar _promedio como variable intermedia
Aguardo comentarios para poder dar una respuesta a la gente de Rectorado, tal vez mientras tanto podríamos corregir en la tabla de egresados el valor resultante del promedio, dependiendo de su respuesta.
Gracias, Saludos!
Ezequiel Molina
Fac. de Cs. Agrarias - UNJu