Calculadora de expressões
VidaAvalie com segurança uma expressão aritmética com + − × ÷ % ^ e parênteses. Sem eval, sem execução de código.
Nesta página
O que é esta calculadora?#
É uma calculadora aritmética simples que avalia uma expressão matemática que você digita como texto — (12 * 1.08) + 7 ou 2^10 % 256 — e lhe devolve o número. Não há botões de função para picar; você escreve a expressão inteira e prime uma tecla.
A parte importante é como ela é construída. A maioria das calculadoras rápidas na web trapaceia entregando a sua string ao eval() do JavaScript, que executa qualquer código — bom para um brinquedo, feio no momento em que alguém cola algo esperto. Esta não faz isso: roda um parser recursivo-descendente escrito à mão que aceita apenas números, parênteses e os operadores + - * / % ^. Qualquer coisa fora dessa gramática é rejeitada na hora. O resultado é uma calculadora que genuinamente não consegue executar código, o que é exatamente o motivo pelo qual é segura para colar.
Como usar#
- Digite a sua expressão na caixa de Entrada. Espaços em branco são ignorados, então
1+2e1 + 2são o mesmo. - Operadores:
+-*/para as quatro operações básicas,%para módulo (o resto),^para potência. Parênteses()agrupam. Menos unário funciona, então-5 + 3é-2. - Decimais e notação científica são permitidos:
0.5,1e3(que é 1000),2.5e-2. - Clique em Avaliar (ou prima Enter). A linha de Resultado mostra o número, ou uma mensagem inline nomeando o problema —
Divisão por zero,Carácter inesperado,Parênteses desequilibrados, e assim por diante — para que você possa corrigir a expressão em vez de adivinhar o que correu mal. - O pó de vírgula flutuante binária é limpo automaticamente, então
0.1 + 0.2mostra0.3, não0.30000000000000004.
Principais funcionalidades#
- Sem
eval, semnew Function, sem identificadores. Apenas números e sete caracteres de operador são aceites — uma gramática totalmente delimitada, não execução arbitrária de código. - Precedência correta de operadores (PEMDAS): parênteses, depois
^, depois* / %, depois+ -. - Potência associativa à direita.
2^3^2avalia do jeito que os matemáticos o escrevem (veja o exemplo prático). - Notação científica (
6.022e23) e módulo (17 % 5) para contas reais de envelope. - Erros amigáveis e específicos que nomeiam a falha (divisão por zero, expressão truncada, número inválido) com a posição ofensiva, em vez de um
NaNsilencioso.
Exemplo prático#
Três expressões que mostram cada uma um comportamento diferente. Cole-as uma de cada vez.
Precedência e agrupamento de operadores.
(1 + 2) * 3 ^ 2
Resultado: 27. Os parênteses forçam 1 + 2 = 3 primeiro; depois 3 ^ 2 é avaliado antes da multiplicação (potência liga-se mais forte do que *), dando 9; por fim 3 * 9 = 27. Sem os parênteses, 1 + 2 * 3 ^ 2 seria 1 + 18 = 19.
Potência associativa à direita.
2 ^ 3 ^ 2
Resultado: 512, não 64. Potência associa à direita, então isto é 2 ^ (3 ^ 2) = 2 ^ 9 = 512. Se você queria mesmo (2 ^ 3) ^ 2 = 64, escreva os parênteses.
Pó binário removido.
0.1 + 0.2
Resultado: 0.3. A soma bruta em vírgula flutuante binária é 0.30000000000000004; o formatador arredonda-a de volta a um número sensato de algarismos significativos para que a resposta se leia como um humano espera.
FAQ#
Por que não posso usar sin, log, sqrt ou pi?#
Porque esses são identificadores, e identificadores não fazem parte da gramática por propósito. Todo nome é rejeitado como um Carácter inesperado — essa é a linha que impede a calculadora de alguma vez executar código. Se você precisa de sqrt(16), reescreva-o como 16 ^ 0.5; para log e sin, use uma calculadora científica.
2^3^2 dá 512 ou 64?#
512. O operador ^ é associativo à direita, correspondendo à convenção usada na matemática e na maioria dos operadores de potência das linguagens de programação. 2^3^2 lê-se como 2^(3^2). Para obter 64, escreva (2^3)^2.
O que é que o operador % faz aqui?#
É módulo — o resto depois da divisão inteira — não “percentagem”. 17 % 5 é 2, porque 17 dividido por 5 deixa um resto de 2. É útil para “este número é par?” (n % 2), para envolver valores numa faixa, ou para aritmética de relógio. Tem a mesma precedência que * e /.
A minha expressão é enviada para um servidor?#
Não. Análise e avaliação acontecem inteiramente no seu navegador com um parser escrito à mão — não há backend, e a entrada nunca sai da página.