Number.isSafeInteger()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
O método Number.isSafeInteger()
determina se o valor fornecido é seja um número seguro.
Experimente
function warn(x) {
if (Number.isSafeInteger(x)) {
return "Precision safe.";
}
return "Precision may be lost!";
}
console.log(warn(Math.pow(2, 53)));
// Expected output: "Precision may be lost!"
console.log(warn(Math.pow(2, 53) - 1));
// Expected output: "Precision safe."
Um inteiro seguro é um inteiro que:
- pode ser representando exatamente como um número IEEE-754 de dupla precisão e
- pode ser representando exatamente como um número IEEE-754 de precisão dupla e
- cuja representação IEEE-754 não pode ser o resultado do arrendodamento de qualquer outro número inteiro para se ajustar ao IEEE-754.
Exemplo, 253 - 1
é um inteiro seguro: pode ser exatamente representado, e nenhum outro numero arredondado existe para ele na represetanção IEEE-754. Em contexto, 253
não é um inteiro seguro: pode ser representado em IEEE-754, mas um inteiro 253 + 1
não pode ser diretamente representado em IEEE-754 mas instanciado do arrendamento de 253
sob arrendamento para o mais próximo e do arrendamento de zero a zero. Os inteiros seguros consistem em todos os inteiros de -(253 - 1)
inclusive para 253 - 1
(sendo ± 9007199254740991
ou ± 9,007,199,254,740,991).
A manipulação de valores entre ~9 quadrilhões com precisão total requer o uso de arbitrary precision arithmetic library (biblioteca aritmética de precisão arbitrária). Veja What Every Programmer Needs to Know about Floating Point Arithmetic (o que todo programador precisa saber sobre aritmética de ponto flutuante) para mais informações sobre represetanções de número de ponto flutuante.
Para números inteiros maiores, considere o uso do tipo BigInt
.
Sintaxe
Number.isSafeInteger(valorTest)
Parâmetros
valorTest
-
O valor a ser testado pode ser um número inteiro seguro.
Retorno
Um Boolean
indica se o valor fornecido é um número seguro ou não.
Exemplos
Number.isSafeInteger(3); // true
Number.isSafeInteger(Math.pow(2, 53)); // false
Number.isSafeInteger(Math.pow(2, 53) - 1); // true
Number.isSafeInteger(NaN); // false
Number.isSafeInteger(Infinity); // false
Number.isSafeInteger("3"); // false
Number.isSafeInteger(3.1); // false
Number.isSafeInteger(3.0); // true
Polyfill (caso não exista suporte)
Number.isSafeInteger =
Number.isSafeInteger ||
function (value) {
return (
Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER
);
};
Especificações
Specification |
---|
ECMAScript® 2025 Language Specification # sec-number.issafeinteger |
Compatibilidade com navegadores
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
isSafeInteger |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support
Veja também
- O objeto pertence a
Number
Number.MIN_SAFE_INTEGER
Number.MAX_SAFE_INTEGER
BigInt