No sé si estoy perdiendo algo obvio aquí, pero ...Firefox y Javascript reglas de redondeo
En IE, Opera y Chrome, consigo lo que espero de redondeo de números que terminan en un 5:
125 toPrecision(2) => 130
11.5 toPrecision(2) => 12
Esto es lo que esperaría.
Firefox, sin embargo, es un poco más 'sofisticada' produciendo el siguiente:
125 toPrecision(2) => 120 //wtf!!!
11.5 toPrecision(2) => 12
Después de un poco de rascarse la cabeza, he llegado a la conclusión de que Firefox utiliza una 'incluso redondeo' regla donde, si el dígito antes de que el 5 es aún el número se redondea hacia abajo y si el dígito antes del 5 es impar el número se redondea:
0.5 => 0
1.5 => 2
2.5 => 2
3.5 => 4, etc.
estoy usando los resultados redondeados para probar las soluciones de los estudiantes a las preguntas de ingeniería con seudo -Intervenciones de preguntas generadas aleatoriamente. Una pregunta introducida en Chrome podría ser h = 1020 mm pero h = 1030 mm en FF, Chrome u Opera.
Necesito una función para hacer el redondeo consistente, es decir, quiero que 0.00redondee hasta 0.000124 y quiero que 1234 redondee a 1240, así que no puedo usar un simple num = Math.floor (num + 0.5); Para complicar las cosas un poco, quiero variables de entrada y las respuestas de los estudiantes para ser correctos a 3 sig excavaciones a menos que el primer dígito es un 1, en cuyo caso quiero 4 sig cava:
234.5 => 235
134.5 => 134.5
He hackeado una solución a las 3 o 4 sig excavaciones dependiendo del primer dígito convirtiendo el número en una cadena y probando el primer carácter distinto de cero, no decimal y no negativo para '1'; no es bonito, pero funciona. Podría hacer algo similar para el problema de redondeo, verificando si el dígito que se redondeará es un 5, pero me pregunto si existe una solución inteligente a nivel de bit.
"Quiero 1234 redondear a 1240"? –