Calculadora de arredondar para centavos
Resultado
Valor arredondado
- Centavos
- 268
Arredondar um valor para o centavo mais próximo significa cortá-lo em duas casas decimais, com valores exatamente a meio centavo indo para longe do zero: 2,675 vira 2,68 e 0,005 vira 0,01. É a última etapa de quase toda conta de dinheiro, porque um preço multiplicado por uma quantidade, ou uma taxa aplicada a um subtotal, quase nunca cai em um número exato de centavos. Fazer isso corretamente é mais difícil do que parece. O caminho direto multiplica por 100, arredonda para um número inteiro e divide de volta, e ele falha exatamente nos valores com que as pessoas se importam: 1,005 multiplicado por 100 dá 100,49999999999999 em vez de 100,5, então o número arredonda para baixo e vira 1,00, e o último centavo desaparece sem avisar. A causa é um erro de representação em ponto flutuante: um centésimo não tem forma exata em binário, e o valor guardado fica um fio abaixo do meio centavo. Exibir o valor com duas casas decimais, em vez de arredondar, esbarra no mesmo problema pela mesma razão, porque está olhando para o mesmo número um pouco pequeno demais. Nenhuma das duas falhas se anuncia: o resultado é um valor de aparência perfeitamente comum, e a única forma de notar o erro de arredondamento é saber qual deveria ter sido a resposta. Esta página evita a armadilha movendo a vírgula como texto em vez de multiplicar, então a decisão é tomada sobre o valor exato. Ela também informa o valor como um número inteiro de centavos, que é a forma que vale a pena guardar quando você ainda vai fazer mais contas com ele. O resultado é escrito do jeito que o seu idioma escreve dinheiro: um leitor de inglês vê mil duzentos e trinta e quatro e cinquenta e sete centésimos como 1,234.57, com vírgula entre os milhares e ponto antes dos centavos, enquanto um leitor de português vê o mesmo valor como 1.234,57, com os dois trocados. Dois valores que diferem só no último centavo voltam como números diferentes, e é exatamente disso que se trata.
Quatro valores que parecem comuns e arredondam para o lado errado
| Valor | Arredondado | Centavos |
|---|---|---|
| 2.675 | 2.68 | 268 |
| 1.005 | 1.01 | 101 |
| 0.005 | 0.01 | 1 |
| -0.005 | -0.01 | -1 |
Cada linha aqui é um valor que uma implementação direta erra, e cada uma falha por um motivo próprio. 2.675 é o exemplo que todo mundo usa e é o único caso em que escalar por cem dá certo, já que cai exatamente em 267.5 — então é uma amostra ruim e um bom aviso, porque quem conferir apenas esta linha vai ver o próprio código concordar e concluir que não há nada a corrigir. 1.005 é a falha de verdade: um centésimo não tem forma binária exata, então escalá-lo dá 100.49999999999999 e os dois métodos óbvios respondem 1.00. 0.005 é exatamente meio centavo e vai para longe do zero, o que, num valor positivo, é o mesmo que ir para cima. E -0.005 é o mesmo valor com sinal, onde as duas regras se separam: arredondar uma metade negativa em direção ao infinito positivo dá um zero negativo, que sai impresso como -0.00. A terceira coluna anda ao lado para que cada linha mostre também as duas visões de um mesmo valor — o decimal à esquerda, o número inteiro de centavos à direita, calculado a partir do valor arredondado, de modo que os dois nunca possam discordar. A tabela usa ponto como separador decimal, conforme o padrão do sistema.
Fórmula
2,675 ⇒ 2,68; 1,005 ⇒ 1,01; 0,005 ⇒ 0,01; -0,005 ⇒ -0,01; centavos = arredondado × 100
- valor
- O valor a arredondar, de -1.000.000.000 a 1.000.000.000. Mais de duas casas decimais são aceitas de propósito: 1,005 e 2,675 são exatamente o que esta página existe para tratar, e um campo que os recusasse afastaria justamente os casos para os quais ela foi feita. O campo não exige duas casas decimais, e não deveria — o assunto é a regra de arredondamento, não o formato da entrada
- arredondado
- O valor depois de arredondado para duas casas decimais, e a primeira linha do resultado, que o painel rotula de Valor arredondado. É um número, e não um texto, e é por isso que ele sai com o separador decimal e o separador de milhar do seu idioma: 1234.57 em inglês, 1.234,57 em português. Essa diferença em relação à página de arredondamento geral é deliberada, e é a única na mesma entrada
- centavos
- O mesmo valor expresso como um número inteiro de centavos, que é uma saída separada e não uma segunda forma de escrever a primeira — o painel a rotula de Centavos. 268 é um número inteiro com o qual você pode somar, dividir e contar; 2,68 é um decimal que volta a ser ponto flutuante no momento em que você o multiplica por qualquer coisa. Ele é calculado a partir do valor já arredondado, e não da entrada original, então as duas linhas nunca podem discordar: 1,005 devolve 1,01 ao lado de 101, nunca 1,01 ao lado de 100
- metade afastando do zero
- A regra para valores que ficam exatamente a meio centavo: 0,005 vai para 0,01 e -0,005 vai para -0,01. Arredondar a metade para cima e arredondar a metade afastando do zero dão o mesmo resultado nos valores positivos e diferem nos negativos, e é aí que a distinção se paga — o método ingênuo com números inteiros devolve aqui um zero negativo, e -0,00 não é uma coisa que se deva mostrar a alguém como valor a pagar
- 1,005 × 100 = 100,49999999999999
- A falha em torno da qual esta página foi construída. Um centésimo não pode ser guardado exatamente em binário, então escalar por cem cai logo abaixo do ponto de meio caminho e o arredondamento vai para o lado errado. Todo método que multiplica primeiro, seja arredondando o número em seguida, seja formatando-o com duas casas decimais, herda esse erro e responde 1,00. Mover a vírgula no texto, em vez disso, mantém o valor exato, e a resposta sai 1,01
- -0,005 → -0,01
- A metade de centavo negativa, e o caso em que as duas regras de arredondamento se separam. O valor está exatamente meio centavo abaixo de zero, e a regra o empurra para longe do zero em vez de para cima, então ele vira -0,01 e não -0,00. Arredondar uma metade negativa em direção ao infinito positivo dá um resultado de zero negativo, que sai impresso como -0,00 e é lido como erro de arredondamento mesmo quando a conta foi coerente
Toda conta que termina em dinheiro termina aqui. Uma conta dividida entre várias pessoas quase nunca se divide em centavos inteiros, e a sobra precisa ser atribuída a alguém ou arredondada; um imposto ou uma taxa de gorjeta aplicada a um subtotal produz um valor com mais casas decimais do que dinheiro tem; e um preço unitário multiplicado por uma quantidade faz o mesmo. Arredondar no final é o passo óbvio, mas o que importa mais é arredondar no meio. Uma tabela de amortização calcula os juros sobre o saldo a cada período e arredonda os juros de cada período para o centavo antes de somá-los de volta, porque arredondar só no final deixa as partes fracionárias se acumularem — ao longo de trezentos e sessenta períodos esse desvio deixa de ser fração e passa a aparecer no saldo final, que deixa de bater com o do credor. O mesmo raciocínio vale sempre que um total é montado a partir de partes arredondadas: as partes precisam ser arredondadas primeiro e somadas depois, não o contrário. O número de centavos é a forma que vale a pena guardar para esse tipo de trabalho, já que é um número inteiro e continua exato até o fim. Onde a pergunta é sobre casas decimais em geral e não sobre dinheiro — uma medida com três decimais, um número com dois algarismos significativos — a Calculadora de arredondamento cobre treze alvos diferentes em um só lugar; esta página cobre o alvo que o dinheiro usa, e o faz com uma regra que a aritmética não consegue errar.
Exemplos resolvidos
O valor padrão: 2,675
- O valor está entre 2,67 e 2,68, e fica exatamente a meio caminho dos dois
- A metade vai para longe do zero, então a resposta é 2,68 e não 2,67
- Multiplique o valor arredondado por 100: 2,68 × 100 = 268
- A resposta é um valor de 268 centavos
O exemplo que todo mundo usa, e o padrão desta página por esse motivo. É também o único caso em que o método ingênuo por acaso acerta, já que 2,675 multiplicado por 100 cai exatamente em 267,5 em binário, enquanto 1,005 não cai — então, se esta fosse a única amostra da página, quem conferisse o próprio código veria os dois concordarem e concluiria que não há problema nenhum a resolver. O exemplo seguinte é o que mostra a diferença, e é por isso que a página abre com este valor na tela e usa o outro logo abaixo.
O valor que engana todo mundo: 1,005
- O valor fica exatamente a meio caminho entre 1,00 e 1,01
- A metade vai para longe do zero, então a resposta é 1,01
- Escalar por cem dá 100,49999999999999 em vez de 100,5, porque um centésimo não tem forma binária exata
- Um método que multiplica primeiro, portanto, arredonda para baixo e responde 1,00, perdendo um centavo
- Mover a vírgula no texto mantém o valor exato, e é 1,01 que sai
O exemplo pelo qual esta página existe. Multiplique-o por cem e você obtém 100,49999999999999 — não por acaso um fio abaixo do ponto de meio caminho, mas porque 1,005 não é exatamente representável em binário e o valor guardado fica um fio abaixo. Os dois métodos óbvios herdam esse erro: arredondar o número escalado dá 1,00, e formatar o valor com duas casas decimais também dá 1,00, porque os dois estão olhando para o mesmo número um pouco pequeno demais. Nada na saída parece errado. Um centavo simplesmente desapareceu, e a única forma de pegá-lo é saber qual deveria ter sido a resposta. Valores de meio centavo como este são exatamente onde as contas de dinheiro caem, já que uma taxa aplicada a um preço ímpar os produz o tempo todo.
Um valor comum com decimais demais: 1.234,5678
- As duas primeiras casas são 56, e o que vem depois é 78 — mais da metade de um centavo
- Então a segunda casa sobe: 1.234,57
- Multiplique por 100: 1.234,57 × 100 = 123457
- Escrito por extenso, o valor é mil duzentos e trinta e quatro e cinquenta e sete centavos
O caso sem surpresa, que merece um exemplo para a página não ser só armadilhas. Nada de complicado acontece: a terceira casa é 7, então o valor sobe pelo caminho comum e os dois métodos concordam entre si. O que este caso mostra é a formatação, que é a diferença que o leitor nota primeiro. Em inglês o valor volta como 1,234.57, com uma vírgula separando os milhares e um ponto antes dos centavos; em português ele volta como 1.234,57, com os dois trocados de lugar; em francês ele volta com um espaço onde estava a vírgula. Os algarismos são idênticos e a página não os toca — o que muda é como o seu idioma escreve dinheiro, e esta página segue isso, enquanto a página de arredondamento geral deliberadamente não segue.
Meio centavo abaixo de zero: -0,005
- O valor fica exatamente a meio caminho entre zero e menos um centavo
- A metade vai para longe do zero, o que aqui significa para baixo: -0,01
- Multiplicar por 100 dá exatamente -0,5, então este caso escala de forma limpa
- Arredondar -0,5 para um número inteiro do jeito ingênuo dá zero negativo, que sai impresso como -0,00
- Mover a vírgula no texto dá -1 centavo, e -0,01 como valor
O caso que separa as duas regras de arredondamento. Nos valores positivos, arredondar a metade para cima e arredondar a metade afastando do zero dão o mesmo resultado, então a distinção parece preciosismo. Aqui elas se separam: arredondar -0,5 para cima dá zero com um sinal negativo junto, e um valor de zero centavos negativos não é uma coisa que se deva mostrar a alguém. Este caso também escala de forma limpa, já que -0,005 multiplicado por 100 é exatamente -0,5 — a falha binária não é simétrica em relação ao sinal, e é por isso que uma bateria de valores de teste precisa de negativos além de positivos. Um estorno, um crédito ou um desconto maior que o valor chegam todos aqui.
Limitações
O valor precisa ser um número de -1.000.000.000 a 1.000.000.000, e o resultado arredondado pode ficar um passo fora dessa faixa: 999.999.999,999 arredonda para um bilhão exato, e a saída em centavos ali é cem bilhões. As saídas continuam exatas nesse tamanho porque um número inteiro de centavos desse porte ainda está dentro da faixa em que os inteiros são representados com precisão. A regra de arredondamento é metade afastando do zero, e não há ajuste para mudá-la — uma página com um seletor de regra teria de explicar qual regra os tribunais do seu país usam, e esta não faz isso. Valores negativos são arredondados para longe do zero, não para cima, e os dois diferem exatamente nos casos de meio centavo. A página não carrega uma moeda: ela sabe quantos centavos um valor dá, mas não sabe como esses centavos se chamam, então a saída é um número e qualquer símbolo fica por sua conta. Ela arredonda um valor por vez e não divide um total entre pessoas, não atribui sobras nem fecha uma tabela de amortização. A tabela de referência abaixo mostra quatro valores fixos em vez de acompanhar a sua entrada, e os números nela são impressos sem localização, então aparecem como 2.675 e -0.005 em qualquer idioma, mesmo que o painel de resultados acima localize o resultado.
Perguntas frequentes
- Por que 1,005 arredonda para 1,01 e não para 1,00?
- Porque ele está exatamente a meio caminho entre 1,00 e 1,01, e a regra da metade manda o valor para longe do zero. A resposta só parece a surpreendente porque as implementações óbvias devolvem 1,00 no lugar dela. Multiplique 1,005 por cem e você obtém 100,49999999999999, não 100,5 — um centésimo não pode ser guardado exatamente em binário, e o valor que fica guardado está um fio abaixo do valor real. Então um método que escala primeiro, seja arredondando o número em seguida, seja formatando-o com duas casas decimais, está olhando para um valor um pouco abaixo do ponto de meio caminho e arredonda para baixo. O centavo não some com barulho; a saída é um valor de aparência comum. Esta única entrada é a razão de existir uma página aqui em vez de uma fórmula de uma linha.
- Ele arredonda metade para cima ou metade para o par?
- Metade afastando do zero — para cima nos valores positivos, para baixo nos negativos. É o que quase todo sistema de caixa faz e o que uma pessoa quer dizer quando arredonda um preço, então 2,5 centavos viram 3 e -2,5 centavos viram -3. Arredondar metade para o par é a outra regra comum, e ela existe para impedir que colunas longas de números subam demais quando são somadas; ela importa em estatística e em algum trabalho de contabilidade, e não é o que esta página faz. As duas regras concordam em todos os valores, exceto nas metades exatas, e é por isso que a diferença passa fácil até um pagamento cair em uma delas. Não há seletor, porque um seletor precisaria explicar qual regra vale em cada jurisdição.
- Por que informar também o número de centavos?
- Porque os dois servem para coisas diferentes, e o número inteiro é o que continua exato. Duzentos e sessenta e oito é um número inteiro: você pode somá-lo a outros centavos inteiros, dividi-lo entre pessoas, multiplicá-lo por uma quantidade e seguir em frente sem que nada aconteça com ele. Dois vírgula sessenta e oito é um decimal, e no momento em que você o multiplica por qualquer coisa ele volta a ser um número de ponto flutuante, com o mesmo problema de representação que você veio evitar aqui. É também por isso que os centavos são calculados a partir do valor já arredondado, e não da entrada original — se fossem calculados em separado, uma entrada como 1,005 poderia imprimir 1,01 em uma linha e 100 na seguinte, e dois números do mesmo painel discordando é pior do que qualquer um dos dois estar um pouco fora.
- Por que o resultado sai com vírgula e com ponto nos milhares?
- Porque dinheiro é escrito do jeito que o idioma do leitor escreve, e isso não é igual em toda parte. O inglês põe um ponto antes dos centavos e vírgulas entre os milhares, então o valor sai como 1,234.57. O português faz o contrário: 1.234,57. O francês usa um espaço onde estava a vírgula: 1 234,57. A página informa o valor como um número, e não como um texto, então a formatação segue o idioma em que você está lendo. A página de arredondamento geral deste site deliberadamente não faz isso — o resultado dela é texto, com ponto fixo e sem separador de milhar — e é a única coisa em que as duas páginas realmente diferem na mesma entrada.
- Onde arredondar para o centavo realmente importa?
- Em qualquer lugar onde um total é montado a partir de partes. Uma tabela de amortização é o caso mais claro: os juros de cada período são calculados sobre o saldo restante, arredondados para o centavo e somados de volta, e fazer o arredondamento uma única vez no final deixa as frações que sobraram se acumularem — ao longo de trezentos e sessenta períodos esse desvio deixa de ser fração e o saldo final para de bater com o do credor. Dividir uma conta tem a mesma forma, já que um total repartido entre várias pessoas raramente cai em centavos inteiros e o centavo ímpar precisa ir para algum lugar. E toda taxa aplicada a um valor — imposto, gorjeta, desconto — produz mais casas decimais do que dinheiro tem. A regra para levar embora é que as partes são arredondadas primeiro e as partes arredondadas são somadas depois, e não o contrário.
- Qual é o maior valor que a página aceita?
- Um bilhão, para cada lado, e a resposta arredondada pode ficar um passo fora disso — 999.999.999,999 arredonda para exatamente um bilhão, e a saída em centavos ali é cem bilhões. As saídas continuam exatas nesse tamanho porque um número inteiro de centavos desse porte ainda está dentro da faixa em que todo número inteiro é representado com precisão; o teto fica bem abaixo do ponto em que os inteiros começam a ser aproximados. Entradas acima do limite são recusadas em vez de ajustadas, já que arredondar em silêncio um valor que você não digitou seria uma resposta pior do que dizer não.
Referências
- Rounding — the half-away-from-zero rule, and how it differs from rounding half upward on negative values — Wolfram MathWorld (United States)
- What Every Computer Scientist Should Know About Floating-Point Arithmetic — why 1.005 stored as a double is a hair below the half-way point — Oracle (originally ACM Computing Surveys)
- Number.prototype.toFixed — the round-half-to-even behaviour, and why formatting a value to two decimals is not the same as rounding it — MDN Web Docs (Mozilla)