Math.pow 给出错误的结果

Nou*_*l.M 4 javascript pow

我试图重复一个字符N次,但遇到了这个Math.pow函数。

但是当我在控制台中使用它时,结果对我来说没有任何意义:

Math.pow(10,15) - 1提供正确的结果999999999999999

但是为什么Math.pow(10,16) - 1提供10000000000000000呢?

tri*_*cot 6

您正在生成超出Number.MAX_SAFE_INTEGER值的结果,因此它们不再准确到单位。

这与 JavaScript 使用 64 位浮点数表示数字的事实有关,因此实际上您只有大约 16(十进制)位的精度。

由于在 EcmaScript 中引入了BigInt,您可以使用该数据类型获得准确的结果,尽管它不能与Math.pow. 相反,您可以使用**运算符。

查看 number 和 bigint(带n后缀)的使用有何不同:

10  ** 16  - 1  // == 10000000000000000
10n ** 16n - 1n // ==  9999999999999999n
Run Code Online (Sandbox Code Playgroud)