Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao lidar com operações de formatação numérica em JavaScript, um desafio comum é arredondar números para no máximo duas casas decimais somente quando necessário, sem comprometer a precisão ou gerar resultados inesperados. Essa questão é especialmente relevante em aplicações financeiras, relatórios ou qualquer sistema que exija uma apresentação de dados clara e consistente.
A maioria das soluções tradicionais utiliza a função Math.round(), que multiplica o número por uma potência de 10, arredonda e divide de volta. Apesar de simples, essa abordagem costuma apresentar problemas quando o número é exatamente no limite, como 1.005, devido à forma como números decimais são representados no padrão IEEE 754. Essa imprecisão pode levar a resultados como 1 em vez de 1.01.
Além disso, há o desejo de evitar arredondar números que já estão na quantidade desejada de casas decimais, preservando a precisão original para números como 9.1, que devem permanecer assim, e apenas arredondar 1.7777777 para 1.78.
O uso direto de Math.round() é insuficiente para casos delicados. A manipulação com Number.EPSILON, uma constante que representa a menor diferença possível entre números representáveis, ajuda a contornar limitações de precisão. A combinação de Math.round() com Number.EPSILON garante que arredondamentos como 1.005 resultem em 1.01, não em 1. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Outro ponto importante é detectar quando o número precisa de arredondamento. Para isso, podemos verificar se o número possui mais de duas casas decimais, usando operações de string ou manipulação numérica. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
A estratégia consiste em dois passos:
1. Verificar se o número possui mais de duas casas decimais.
2. Se sim, aplicar o arredondamento usando uma fórmula robusta, que considera a precisão, e retornar o valor arredondado.
Exemplo de pseudocódigo:
function arredondarSeNecessario(valor) {
const valorStr = valor.toString(). const partes = valorStr.split('.'). if (partes.length === 2 && partes[1].length > 2) {
return Math.round((valor + Number.EPSILON) * 100) / 100. }
return valor. }
Esse método garante que números com mais de duas casas decimais sejam arredondados, enquanto números já adequados permanecem intactos.
Apesar de eficaz, essa abordagem pode apresentar dificuldades com números extremamente precisos ou valores que, ao serem arredondados, geram pequenas diferenças na apresentação. Além disso, ao usar a conversão para string, há o risco de perder precisão em números muito grandes ou muito pequenos, embora seja improvável nesse contexto. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Outro ponto é que, para aplicações que demandam alta performance, verificar a quantidade de casas decimais a cada operação pode impactar a eficiência. Nesses casos, uma estratégia de cache ou uma abordagem diferente pode ser necessária. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois.
1. Crie uma função de utilidade que detecte a quantidade de casas decimais.
2. Implemente a lógica de arredondamento condicional, usando Number.EPSILON para evitar imprecisões.
3. Teste com diversos casos, incluindo limites e números com precisão exata.
4. Integre essa função ao fluxo de formatação de valores na sua aplicação, garantindo consistência.
Fazer esse ajuste fino na apresentação de números pode parecer trivial, mas evita surpresas na exibição de dados críticos. Essa abordagem combina a precisão técnica com uma implementação prática, ajudando a manter a integridade das informações entregues ao usuário final. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Carregando comentários...