Skip to content

Commit

Permalink
[zh-cn]: update the translation of Number.isSafeInteger() (#16040)
Browse files Browse the repository at this point in the history
  • Loading branch information
JasonLamv-t authored Sep 24, 2023
1 parent 2bc4143 commit 4938fd2
Showing 1 changed file with 25 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,53 +5,53 @@ slug: Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger

{{JSRef}}

**`Number.isSafeInteger()`** 方法用来判断传入的参数值是否是一个“安全整数”(safe integer)
**`Number.isSafeInteger()`** 静态方法判断提供的值是否是一个*安全整数*

一个安全整数是一个符合下面条件的整数:

- 可以准确地表示为一个 IEEE-754 双精度数字,
- 其 IEEE-754 表示不能是舍入任何其他整数以适应 IEEE-754 表示的结果。.

比如,`2^53 - 1` 是一个安全整数,它能被精确表示,在任何 IEEE-754 舍入模式(rounding mode)下,没有其他整数舍入结果为该整数。作为对比,`2^53` 就不是一个安全整数,它能够使用 IEEE-754 表示,但是 `2^53 + 1` 不能使用 IEEE-754 直接表示,在就近舍入(round-to-nearest)和向零舍入中,会被舍入为 `2^53`

安全整数范围为 `-(2^53 - 1)``2^53 - 1` 之间的整数,包含 `-(2^53 - 1)``2^53 - 1`
{{EmbedInteractiveExample("pages/js/number-issafeinteger.html")}}

## 语法

```plain
```js-nolint
Number.isSafeInteger(testValue)
```

### 参数

- `testValue`
- : 需要检测的参数
- : 要测试是否为安全整数的值

### 返回值

一个{{jsxref("Boolean", "布尔值")}} 表示给定的值是否是一个安全整数(safe integer)。
如果给定的值是一个安全整数,则返回布尔值 `true`。否则返回 `false`

## 描述

安全整数由 -(2<sup>53</sup> - 1) 到 2<sup>53</sup> - 1 的所有整数组成,包含(±9,007,199,254,740,991)。安全整数是符合以下条件的整数:

- 可以精确地表示为 IEEE-754 双精度数,并且
- 其 IEEE-754 表示形式不能是舍入任何其他整数以适应 IEEE-754 表示形式的结果。

例如,2<sup>53</sup> - 1 是一个安全整数:它可以精确地表示,并且在任何 IEEE-754 舍入模式下都没有其他整数舍入结果为该整数。相比之下,2<sup>53</sup> *不是*一个安全整数:它可以在 IEEE-754 中精确地表示,但整数 2<sup>53</sup> + 1 不能直接在 IEEE-754 中表示,而是采用就近舍入和向零舍入时,会舍入到 2<sup>53</sup>。

处理大约 9 千万亿左右的值时,需要使用[任意精度算术库](https://zh.wikipedia.org/wiki/高精度计算)来实现完全精确性。有关浮点数表示的更多信息,请参阅[程序员需要了解的浮点数算术知识](https://floating-point-gui.de/)

对于更大的整数,请考虑使用 {{jsxref("BigInt")}} 类型。

## 示例

### 使用 isSafeInteger()

```js
Number.isSafeInteger(3); // true
Number.isSafeInteger(Math.pow(2, 53)); // false
Number.isSafeInteger(Math.pow(2, 53) - 1); // true
Number.isSafeInteger(2 ** 53); // false
Number.isSafeInteger(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

```plain
Number.isSafeInteger = Number.isSafeInteger || function (value) {
return Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER;
};
```

## 规范

{{Specifications}}
Expand All @@ -60,8 +60,10 @@ Number.isSafeInteger = Number.isSafeInteger || function (value) {

{{Compat}}

## 相关链接
## 参见

- [`core-js``Number.isSafeInteger` 的 polyfill](https://github.com/zloirock/core-js#ecmascript-number)
- {{jsxref("Number")}}
- {{jsxref("Number.MIN_SAFE_INTEGER")}}
- {{jsxref("Number.MAX_SAFE_INTEGER")}}
- {{jsxref("BigInt")}}

0 comments on commit 4938fd2

Please sign in to comment.