avatar
Desenvolvedor Web MongoDB, ExpressJS, ReactJS, NodeJS.



04/11/2020 - Como arredondar as casas decimais em JavaScript

Como desenvolvedores fatalmente um dia precisaremos arredondar números em JavaScript. É normal procurar um como fazer na Internet.

Entretanto até procedimentos simples podem ter erros de precisão.

Uma forma de arredondar um número decimal para 2 casas decimais, por exemplo, usando JavaScript, é usando Math.round(decimal * 100) / 100, mesmo assim o método acaba esbarrando em limitações de precisão da linguagem.

Esta forma é um padrão e bastante eficaz para fazer arredondamento de decimal, porém é necessário saber que este é um método pouco confiável.

Uma função proposta para arredondar números decimais em Javascript

Você poderá procurar e encontrar na internet funções de uma linha com este propósito, mas infelizmente elas não serão precisas. Isso é se devido à natureza binária que os números decimais possuem.

O padrão utilizado pelo JavaScript para trabalhar com ponto flutuante é o IEE 745 . Quando se realiza uma operação aritmética em dois números float ou double, é realizado um arredondamento (seja para mais ou para menos) na última casa (bit), onde termina o espaço que foi alocado em memória para representar o número.

Isso explica o motivo de em JavaScript ocorrerem resultados estranhos para operações básicas, exemplo:

const nummero = 0.2 + 0.4; // false console.log(0.6 == nummero); // 0.6000000000000001 console.log(nummero);

Na função nativa do Javascript de arredondamento Math.round ou no método toFixed também vamos esbarrar com o mesmo inconveniente ao tentar arredondar para X casas decimais.

Confira abaixo uma função que funciona com precisão, trazida pelo usuário do Stack Overflow A Kunin

const round = (num, places) => { if (!("" + num).includes("e")) { return +(Math.round(num + "e+" + places) + "e-" + places); } else { let arr = ("" + num).split("e"); let sig = "" if (+arr[1] + places > 0) { sig = "+"; } return +(Math.round(+arr[0] + "e" + sig + (+arr[1] + places)) + "e-" + places); } } console.log(round(1.005, 2)); // 1.01
Este site usa cookies.Para ler a política de dados deste site clique aqui