拆分数字字符串时出现意外结果

kno*_*t22 5 javascript

当下面的数字转换为字符串,然后在小数点处拆分时,表示小数部分的字符串是不正确的。预期值为 0123456789,但控制台中显示的值为 01234567。

const number = 123456789.0123456789;
console.log(number.toString().split("."));
Run Code Online (Sandbox Code Playgroud)

如果小数点左边的位数发生变化,那么在控制台中显示的小数部分也会发生变化,但对于我迄今为止所做的测试,不超过 8 个字符。为什么会这样?我怎样才能让它显示小数点后面的真实数字串?

编辑 -
经过一些反复试验后,这里有一些额外的发现 -
number = 2097151.0123456789小数部分正确时。
number = 2097152.0123456789小数部分不正确时。

小智 0

js 中 float 的二进制表示由 64 位组成,遵循国际 IEEE 754 标准:

\n
    \n
  • 一个符号位,
  • \n
  • 11 个指数位和
  • \n
  • 52 个有效位。
  • \n
\n

数字 f 存储为 f = s \xc2\xb7 m \xc2\xb7 2^e,其中 s 为 1 或 \xe2\x88\x921。

\n

由于二进制系统中的表示形式,如果浮点数在十进制系统中是有限的(例如 12,45),但在二进制系统中是周期性的(例如 1100,01110011001100110011001100...),则可能会出现问题。
\n由于空间有限,数字会四舍五入。有时,当重新转换为十进制系统时,这种舍入可能会被恢复;然而,在某些情况下,由于精度不够(即另一个数字具有相同的表示),这是不可能的。

\n