Calculadora de porcentagem
Reúne as seis perguntas de porcentagem mais comuns: quanto é 20% de 150 (30), que parte um número representa de outro, quanto algo subiu ou caiu e quanto custava antes de um acréscimo. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Valor
- 150
- Cálculo
- X% de um valor
- Porcentagem (%)
- 20
- Resultado
- 30
Calcula porcentagens em seis modos a partir de entradas numéricas: porcentagem de um valor, qual porcentagem um número é de outro, variação percentual entre dois números, um aumento ou desconto percentual, e reverso (retirar uma porcentagem já adicionada). Arredondado half-up até um número escolhido de casas decimais.
As seis perguntas por trás de quase toda porcentagem
Quase todo cálculo de porcentagem é uma de seis perguntas. Quanto é 20% de 150? Que porcentagem um número representa de outro, como uma nota sobre o total? Quanto um preço ou um salário mudou? Quanto fica depois de um aumento ou de um desconto? E a que mais confunde: quanto algo valia antes de receber uma porcentagem, como um imposto ou uma margem? Há uma opção para cada uma, então você escolhe a pergunta em vez de reorganizar uma fórmula.
Os erros clássicos com porcentagens
Um aumento seguido de um desconto da mesma porcentagem não volta ao ponto de partida, porque o desconto é tirado de uma base maior. Tirar um imposto não é subtrair a alíquota: é preciso dividir por um mais a alíquota, que é o que a opção inversa faz. A variação percentual sempre usa o valor antigo como base, por isso a ordem dos dois números importa. Os resultados são arredondados para as casas decimais que você escolher, duas por padrão.
Entradas, arredondamento e quais campos cada modo precisa
O campo opcional decimals assume 2 por padrão e deve ser um inteiro de 0 a 10. Todo campo numérico deve ser um número finito; magnitudes acima de 1e15 são rejeitadas como fora da faixa para manter os resultados significativos e a aba responsiva. A resposta devolve o result numérico simples (e delta para increase/decrease), nunca uma cadeia formatada, de modo que o código consumidor pode fazer mais cálculos sem reinterpretar.
Perguntas frequentes
Como o arredondamento é tratado?
Half-up sobre o valor calculado até as casas decimais que você escolher (0 a 10, padrão 2), aplicado por magnitude, então os negativos arredondam para longe de zero.
Como calculo 20% de 150?
Escolha a opção de porcentagem de um valor, digite 20 como porcentagem e 150 como valor: o resultado é 30. Funciona do mesmo jeito para gorjeta, comissão ou qualquer parte de um total.
Como calculo o aumento percentual entre dois números?
Use a variação percentual e digite primeiro o número antigo e depois o novo. A diferença é dividida pelo número antigo, então o resultado sai positivo quando subiu e negativo quando caiu.
Como tiro uma porcentagem que já está embutida no preço?
Use a opção inversa: ela divide o total por um mais a porcentagem e devolve o valor original. Subtrair a porcentagem direto do total dá um número menor que o correto.
Por que um aumento e um desconto da mesma porcentagem não se anulam?
Porque o desconto é calculado sobre uma base que já aumentou. Se algo sobe 20% e depois cai 20%, termina abaixo do valor em que começou.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/percentage \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"of","percent":20,"value":150}'const res = await fetch("https://api.kit.forhosting.com/dev/percentage", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mode": "of",
"percent": 20,
"value": 150
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/percentage",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mode": "of",
"percent": 20,
"value": 150
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/percentage", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mode":"of","percent":20,"value":150}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mode":"of","percent":20,"value":150}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/percentage", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"mode": "of",
"percent": 20,
"value": 150
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.percentage",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_abs | 1000000000000000 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Os seis modos e suas fórmulas
O campo mode seleciona um de seis cálculos. mode="of" devolve value * percent / 100 (por exemplo, 20% de 150 = 30). mode="is" devolve a / b * 100, a porcentagem que a representa de b. mode="change" devolve (b - a) / a * 100, a variação percentual de um valor antigo a para um valor novo b. mode="increase" devolve tanto delta = value * percent / 100 quanto result = value * (1 + percent/100). mode="decrease" devolve delta e result = value - delta. mode="reverse" devolve value / (1 + percent/100), que recupera o valor base antes de uma porcentagem ter sido adicionada, útil para retirar um markup ou imposto já embutido em um número. Cada modo repete suas entradas na resposta JSON ao lado do result calculado, de modo que o payload é autoexplicativo.
Entradas, arredondamento e quais campos cada modo precisa
of/increase/decrease/reverse leem percent e value; is e change leem os operandos a e b.
Validação, divisão por zero e erros tipados
Uma entrada ausente ou não objeto, um número não finito, um valor de decimals fora de 0..10, ou uma magnitude fora da faixa são todos capturados antes de a aritmética rodar. Uma cadeia de mode desconhecida é rejeitada de imediato. Entrada inválida lança um erro invalid_input tipado com uma mensagem que nomeia o campo, nunca uma quebra não tipada. Três modos protegem contra a divisão por zero: mode="is" rejeita b=0, mode="change" rejeita um valor antigo a=0, e mode="reverse" rejeita uma porcentagem de -100 (que torna 1 + percent/100 igual a zero).
Casos de integração
Descontos e markups
Use mode=of para o valor de um desconto, ou mode=reverse para recuperar um preço base antes do markup a partir de um total.
Relatórios de crescimento e variação
Alimente os números antigo e novo em mode=change para reportar a variação percentual período a período em painéis.
Proporções e parcelas
mode=is responde qual porcentagem um número é de outro, por exemplo uma contagem concluída em relação a um total.
Perguntas técnicas
O que o modo reverse faz?
Ele devolve value / (1 + percent/100), recuperando o valor base antes de uma porcentagem ter sido adicionada, como retirar um imposto ou markup incluído.
Quais campos cada modo precisa?
of, increase, decrease e reverse usam percent e value; is e change usam os operandos a e b. Os demais são ignorados.
Quando eu recebo um erro?
Você recebe um erro invalid_input tipado para números não finitos, decimals fora de 0..10, magnitudes acima de 1e15, ou divisão por zero (b=0 em is, a=0 em change, -100% em reverse).
É gratuito e quanto custa a API?
O widget do navegador é gratuito; a API funciona com saldo KIT pré-pago a partir de US$ 0,002 e tarefas que falham não são cobradas.