javascript - 拆分数字字符串时的意外结果

标签 javascript

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

const number = 123456789.0123456789;
console.log(number.toString().split("."));

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

编辑 -
经过一些试验和错误测试,这里有一些额外的发现 -
number = 2097151.0123456789 小数部分是正确的。
number = 2097152.0123456789 小数部分不正确时。

最佳答案

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

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

  • 数字 f 存储为 f = s · m · 2^e,其中 s 为 1 或 -1。
    由于二进制系统中的表示,如果浮点数在十进制系统中是有限的(例如 12,45)但在二进制系统中是周期性的(例如 1100,01110011001100110011001100...),则可能会出现问题。
    由于空间有限,数字会四舍五入。有时在重新转换为十进制时可以恢复这种舍入;但是,在某些情况下,由于精度不足(即另一个数字具有相同的表示),这是不可能的。

    关于javascript - 拆分数字字符串时的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62367850/

    相关文章:

    javascript - API 集群 - 为默认端点使用自定义组配置

    javascript - Vuejs : Include local javascript file with <script> tag

    javascript - Google 图表双 Y 轴线上的 Y 轴格式

    javascript - 在c3.js中获取x轴值来自定义工具提示?

    javascript - 如何使用 jquery 在悬停时在褪色图像上显示文本

    javascript - jQuery 中的 for-each 循环等效于什么?

    javascript - 未找到 Angular JS 对象

    javascript - jQuery 在复选框更改时设置下拉值

    javascript - 运行 Node.js 应用程序时,如何在函数外修复 'return'?

    javascript - 使用从 jQuery AJAX 响应返回的脚本