es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿JavaScript realiza PEMDAS al hacer cálculos matemáticos?

El siguiente texto:

console.log(ship.x + " + " + (4/3) + " * " + ship.r + " * " + Math.cos(ship.a));

devuelve:

50 + 1.3333333333333333 * 15 * 6.123233995736766e-17

sin embargo, cuando en realidad hago la matemática con JavaScript mediante:

console.log(ship.x + 4 / 3 * ship.r * Math.cos(ship.a));

¡devuelve el valor entero de ’50’! ¿Cómo es esto posible? El primer valor en la línea es 50, por lo que pensarías que lógicamente sería un número más grande una vez que se ejecute. He intentado PEMDAS y muchas otras variaciones y nunca termino con el valor de 50. ¿Qué está haciendo JavaScript con el código anterior? Aquí hay un enlace a la página de código completa: https://codepen.io/hoyos/pen/vYJqaRw?editors=0010

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual la primera línea de código devuelve “50 + 1.3333333333333333 * 15 * 6.123233995736766e-17”, mientras que la segunda línea devuelve un valor entero de 50 es debido al orden de operaciones.

    En la primera línea de código, se está realizando la concatenación de cadenas antes de las operaciones matemáticas en los paréntesis. Esto significa que los valores dentro de los paréntesis se evalúan primero, lo que resulta en un valor decimal de 1.3333333333333333. Este valor luego se multiplica por 15 y el coseno del ángulo del barco. El resultado final se agrega a la posición x del barco de 50 y se concatena como una cadena, lo que resulta en “50 + 1.3333333333333333 * 15 * 6.123233995736766e-17”.

    En la segunda línea de código, las operaciones matemáticas se realizan en el orden correcto debido al uso de paréntesis. El radio del barco se multiplica por el coseno de su ángulo y el valor resultante se multiplica por 4/3. Este valor luego se agrega a la posición x del barco de 50, lo que resulta en un valor entero de 50.

    Por lo tanto, las dos líneas de código son matemáticamente equivalentes, pero la primera línea está concatenando una representación de cadena de las operaciones matemáticas, mientras que la segunda línea está devolviendo el resultado numérico real.

Comments are closed.