Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Number, que segue o padrão IEEE-754 de precisão dupla. Essa representação garante precisão até cerca de 15-16 dígitos, após os quais os números começam a ser arredondados e convertidos para notação científica por padrão. Quando um número ultrapassa esse limite, a conversão automática para notação científica ocorre ao tentar exibi-lo como string.
Para identificar se um número está sendo convertido automaticamente, o método mais simples é testar sua representação como string:
const num = 123456789012345678901. console.log(num.toString()). // Pode exibir 1.2345678901234568e+20
Se a saída estiver em notação científica, o problema está confirmado.
BigIntBigInt é uma alternativa nativa para representar inteiros arbitrariamente grandes, sem perda de precisão. A conversão de um valor para BigInt e sua posterior transformação em string garante que o número seja exibido exatamente como inserido, sem notação científica.
Exemplo:
const grandeNumero = BigInt('123456789012345678901'). console.log(grandeNumero.toString()). // Exibe exatamente 123456789012345678901
Vantagens:
Limites:
BigInt não é possível, uma alternativa é criar uma função que formate o número como string, mantendo os dígitos, mesmo que o valor seja um Number. Essa função pode usar manipulação de string para evitar a conversão automática.
Exemplo:
function formataNumeroGrande(x) {
const str = x.toString(). if (str.includes('e')) {
const [base, exp] = str.split('e'). const expNum = parseInt(exp, 10). if (expNum > 20) {
const zeros = '0'.repeat(expNum - (base.includes('.') ? base.split('.')[1].length : 0)). const numStr = base.replace('.', '').replace('-', ''). return (x < 0 ? '-' : '') + numStr + zeros. }
}
return str. }
console.log(formataNumeroGrande(1.23456789e+20)). // 123456789000000000000 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.
Vantagens:
BigInt.Number.Limites:
big.js, decimal.js ou bignumber.js. Essas bibliotecas oferecem funções para manipular, formatar e exibir números sem perder precisão.
Exemplo com bignumber.js:
const BigNumber = require('bignumber.js'). const num = new BigNumber('123456789012345678901'). console.log(num.toFixed()). // 123456789012345678901 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.
Vantagens:
Limites:
BigInt é a solução mais direta e eficiente, especialmente em ambientes modernos. Para casos específicos ou compatibilidade, a criação de funções de formatação ou a adoção de bibliotecas externas garante maior controle e precisão.
No desenvolvimento de aplicações que lidam com dados sensíveis ou de alta precisão, entender as limitações do tipo Number e preferir alternativas como BigInt ou bibliotecas especializadas é fundamental para evitar erros sutis que podem gerar impactos graves na lógica de negócios ou na apresentação de informações ao usuário. 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.
Carregando comentários...