【问题标题】:Parse Float has a rounding limit? How can I fix this?Parse Float 有舍入限制?我怎样才能解决这个问题?
【发布时间】:2011-11-02 23:58:49
【问题描述】:

我建立了一个系统,将一个紧凑的数据字符串解析为 JSON。我使用 19 位数字来存储 ID。不幸的是,任何大于 17 位的数字,parseFloat() 都会将最后几位数字舍入。

这会破坏整个数据字符串。我可以解决这个问题吗?

例如,8246295522085275215 变成了8246295522085276000。这是为什么呢?

http://jsfiddle.net/RobertWHurst/mhZ7Q/

【问题讨论】:

  • 你没有那么多对象,对吧?然后使用以1 开头的常规递增ID。如果您想阻止人们通过更改 ID 来检索其他对象,请添加一个包含一些随机值的附加参数 - 然后您仍然可以使用正确的 ID(也在您的数据库中作为主键)并且当用户尝试修改 URL 他运气不好,因为他不知道其他项目的随机字符串。
  • 如果这是一个 id,为什么还要把它当作一个数字呢?只需将其保留为字符串

标签: javascript math parsefloat


【解决方案1】:

JavaScript 只有一种数字类型,即 IEEE 754 双精度 floating-point。这意味着,您最多有 52 位精度,比小数点后 15 位多一点。

如果您需要比这更高的精度,则必须使用 bignum 库或使用字符串。

【讨论】:

    【解决方案2】:

    如果 JavaScript 中的数字高于某个特定值,则会失去精度。

    根据http://www.hunlock.com/blogs/The_Complete_Javascript_Number_Reference,整数仅在 15 位以内是可靠的(确切地说是9 * 10^15)。

    【讨论】:

      【解决方案3】:

      尝试其中一种 1.使用字符串 2. 将您的号码一分为二并将较小的部分保存到数组中 3. Bignum 库 4. 如果可以,请使用较小的数字

      【讨论】:

        猜你喜欢
        • 2019-04-10
        • 2013-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        • 2020-11-28
        • 2022-06-10
        • 1970-01-01
        相关资源
        最近更新 更多