[SOLUCIONADO] JS No toma el 4 para calcular

Buen dìa

Deberian tener una secciòn de curiosidades, por que estoy seguro que no es un error

El siguiente caso: tomo cuatro campos de un ML para hallar una definitiva con porcentaje, y se hace bien con todos los valores excepto con valores que sean 4 o su aproximacion; es decir 3.95 a 4

var definitiva = parseFloat(total_trabajo) * 0.20 +
parseFloat(total_produccion) * 0.30 +
parseFloat(total_evaluaciones) * 0.20 +
parseFloat(total_final) * 0.20 +
parseFloat(total_autoevaluacion) * 0.10;

Gracias

Hola John,

a simple vista me hace acordar a los juegos de ingenio matematico XD… todas las variables que obtienes del ML llevan el mismo valor?, esto es… total_trabajo, total_produccion, total… etc… o tienen una distribucion de valores particular?.. cual seria el valor esperado?..

Saludos
Richard

Si Ingeniero, para la prueba probe por ejemplo con 5-5-5-5-5 1-1-1-1-1 y asi sucesivamente, llegando a la conclusiòn que 4-4-4-4-4 no da; porque igual el 100% a una definitiva de 4.

O estoy en un error ?

Buen día,
Lo probe con firefox y da 3.99999, esa infima diferencia suele ser el error de precisión de la aritmetica en punto flotante, pero no creo que nunca llegue a 0.05 de diferencia como en el caso del 4 que planteas, al menos en las pruebas que hice en firefox. ¿Con que navegador/version has hecho el cálculo?

Con varios los he probado IE7, firefox 3.5.5 y me da 3.10, me toco machetiar como se dice y cuando sea 4 lo cambio por 3.99

De todas formas Gracias

Hola John,

una sugerencia, en lugar de usar la funcion asi tal como esta quizas podrias replantearla de la siguiente manera:

var definitiva = (parseFloat(total_trabajo) * 20 +
parseFloat(total_produccion) * 30 +
parseFloat(total_evaluaciones) * 20 +
parseFloat(total_final) * 20 +
parseFloat(total_autoevaluacion) * 10) / 100;

De esta forma cuando los nros en las variables son chicos es menos probable que se pierdan digitos en el proceso ya que la multiplicacion no tienen tantos decimales, el error que se arrastra entonces es menor y la mantisa termina siendo mas significativa.

Saludos

Excelente Ingeniero, asi era

Mil gracias