Calculadora de expresiones
VidaEvalúa de forma segura una expresión aritmética con + − × ÷ % ^ y paréntesis. Sin eval, sin ejecución de código.
En esta página
¿Qué es esta calculadora?#
Es una calculadora aritmética simple que evalúa una expresión matemática que escribes como texto (por ejemplo, (12 * 1.08) + 7 o 2^10 % 256) y te da el número. No hay botones de función a los que picar; escribes toda la expresión y pulsas una tecla.
Lo importante es cómo está construida. La mayoría de calculadoras rápidas en la web hacen trampa pasando tu cadena al eval() de JavaScript, que ejecuta cualquier código: bien para un juguete, feo en el momento en que alguien pega algo ingenioso. Esta no: ejecuta un analizador recursivo descendente escrito a mano que solo acepta números, paréntesis y los operadores + - * / % ^. Cualquier cosa fuera de esa gramática se rechaza al momento. El resultado es una calculadora que genuinamente no puede ejecutar código, que es justamente por lo que es segura para pegar en ella.
Cómo se usa#
- Escribe tu expresión en la caja de entrada. Los espacios se ignoran, así que
1+2y1 + 2son lo mismo. - Operadores:
+-*/para los cuatro básicos,%para el módulo (el resto),^para la potencia. Los paréntesis()agrupan. El menos unario funciona, así que-5 + 3es-2. - Los decimales y la notación científica funcionan:
0.5,1e3(que es 1000),2.5e-2. - Haz clic en Evaluar (o pulsa Enter). La línea de Resultado muestra el número, o un mensaje en línea que nombra el problema («División por cero.», «Carácter inesperado.», «Paréntesis desbalanceados.», etc.), para que puedas arreglar la expresión en vez de adivinar qué falló.
- El polvo de coma flotante binaria se limpia automáticamente, así que
0.1 + 0.2muestra0.3, no0.30000000000000004.
Características clave#
- Sin
eval, sinnew Function, sin identificadores. Solo se aceptan números y siete caracteres de operador: una gramática totalmente acotada, no ejecución arbitraria de código. - Precedencia correcta de operadores (PEMDAS): paréntesis, luego
^, luego* / %, luego+ -. - Potencia asociativa por la derecha.
2^3^2se evalúa como la escriben los matemáticos (ver el ejemplo práctico). - Notación científica (
6.022e23) y módulo (17 % 5) para cálculos reales de sobres. - Errores amistosos y específicos que nombran el fallo (división por cero, expresión incompleta, número inválido) con la posición correspondiente, en vez de un silencioso
NaN.
Ejemplo práctico#
Tres expresiones que muestran cada una un comportamiento distinto. Pégalas una a una.
Precedencia y agrupación de operadores.
(1 + 2) * 3 ^ 2
Resultado: 27. Los paréntesis fuerzan 1 + 2 = 3 primero; luego 3 ^ 2 se evalúa antes que la multiplicación (la potencia liga más fuerte que *), lo que da 9; finalmente 3 * 9 = 27. Sin los paréntesis, 1 + 2 * 3 ^ 2 sería 1 + 18 = 19.
Potencia asociativa por la derecha.
2 ^ 3 ^ 2
Resultado: 512, no 64. La potencia asocia a la derecha, así que esto es 2 ^ (3 ^ 2) = 2 ^ 9 = 512. Si de verdad querías (2 ^ 3) ^ 2 = 64, escribe los paréntesis.
Polvo binario eliminado.
0.1 + 0.2
Resultado: 0.3. La suma en coma flotante binaria en bruto es 0.30000000000000004; el formateador la redondea de vuelta a un número sensible de dígitos significativos para que la respuesta se lea como espera un humano.
Preguntas frecuentes#
¿Por qué no puedo usar sin, log, sqrt o pi?#
Porque esos son identificadores, y los identificadores no son deliberadamente parte de la gramática. Todo nombre se rechaza como «Carácter inesperado»: esa es la línea que impide que la calculadora ejecute jamás código. Si necesitas sqrt(16), reescríbelo como 16 ^ 0.5; para log y sin, usa una calculadora científica.
¿2^3^2 da 512 o 64?#
512. El operador ^ es asociativo por la derecha, lo que coincide con la convención usada en matemáticas y en la mayoría de operadores de potencia de los lenguajes de programación. 2^3^2 se analiza como 2^(3^2). Para obtener 64, escribe (2^3)^2.
¿Qué hace aquí el operador %?#
Es módulo: el resto tras la división entera, no «porcentaje». 17 % 5 es 2, porque 17 dividido entre 5 deja un resto de 2. Es útil para responder a «¿es este número par?» (n % 2), envolver valores en un rango o para la aritmética de reloj. Tiene la misma precedencia que * y /.
¿Mi expresión se envía a un servidor?#
No. El análisis y la evaluación ocurren totalmente en tu navegador con un analizador escrito a mano: no hay backend y la entrada nunca sale de la página.