PDA

Ver la Versión Completa : Obtener decimales calculando porcentajes


rrf
24-08-2010, 01:10:05
Hola.
quiero hacer una consulta en la que se calcula el porcentaje de respuestas SI, NO y SIN respuesta en un cuestionario.

Utilizo los campos RESP_SI, RESP_NO y RESP_sin y el de total de respuestas TOT_PREGUNTAS. Los 4 campos son integer.

La sentencia que uso es:

select a.RESP_SI, a.RESP_NO, a.RESP_sin, a.TOT_PREGUNTAS,
(a.RESP_SI*100 / a.TOT_PREGUNTAS ) R_SI,
(a.RESP_NO*100 / a.TOT_PREGUNTAS ) R_NO,
(a.RESP_sin*100 / a.TOT_PREGUNTAS ) R_Sin
from cuestionario a


Todo funciona bien, excepto que los valores que devuelve de las operaciones son valores enteros, lo que produce normalmente que la suma de los 3 porcentajes sea 98 ó 99, raramente 100, porque redondea a la baja y, un 27,55 lo convierte en 27.

La pregunta es: ¿Hay alguna forma de obtener los resultados en la consulta con decimales?. ¿Cómo sería?.

Uso Firebird 2.0.

Gracias de antemano.

Axel_Tech
24-08-2010, 14:09:01
Puedes probar con cast (http://www.firebirdsql.org/refdocs/langrefupd20-cast.html), transformando a tipo NUMERIC ó DECIMAL.

rrf
24-08-2010, 23:53:23
Hola Axel_Tech.

Gracias por tu propuesta. Ha funcionado parcialmente.

Si la operación es entre el valor de un campo y un número constante, funciona bien (utilicé NUMERIC, DECIMAL, FLOAT y REAL, aunque no da decimales con todos estos tipos).

Pero no funciona con decimales en el resultado (aunque sí funciona devolviendo valores enteros) si se realiza una operación (como dividir) entre los valores de 2 campos (que son integer).

De ayer a hoy he buscado otra vía para resolverlo (sin usar SQL) y, aunque me interesa a nivel de curiosidad y de aprender, he dejado de necesitarlo de forma inmediata.

Sin embargo, si alguien sabe como hacerlo (si se puede hacer, claro), creo que sería una buena aportación el que compartiera su solución en este hilo, para cualquier otra persona del foro que pueda necesitarlo.

Gracias.

rrf
26-08-2010, 00:10:31
Hola de nuevo.

Hice una prueba usando campos tipo FLOAT y funcionó bien, dando decimales.

Así que debe ser suficiente con que los campos que entren en la operación que se realiza en el SELECT sean de tipo FLOAT.

Saludos.

Alejandro73
26-08-2010, 16:35:33
Ojo que cuando muestres ese dato tre saldra con una gran cantidad de decimales, si quieres mostrar solo un decimal debes hacer lo siguiente en el SELECT

Select Round(promedio,1) as variableamostrar

Esto te permitira obtener del campo promedio que es de tipo FLOAT solo un decimal en la visualizacion.

Saludos

Alejandro Arancibia
CHILE

rrf
26-08-2010, 23:59:13
Gracias Alejandro.

Interesante ese ROUND, aunque no lo pude usar en Firebird 2.0.

Saludos.