推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
hayao650

javascript, parseInt 结果与原字符串不符

  •  
  •   hayao650 · Apr 9, 2016 · 4350 views
    This topic created in 3871 days ago, the information mentioned may be changed or developed.

    今天加班,配合前端工作,前端有一个奇怪的问题,有一个数据从后端取出来后,在随后的接口传给后端,但是这个数据,不知道怎么被改变了,我调试了一下,发现是 parseInt 之后,数据变了,但是我不知道为什么,所以来问一下,有没有兄弟清楚

            var s = "62201604091700693";
            alert(parseInt(s,10));
    

    alert 出来的数据变成 62201604091700696

    14 replies  •  2016-04-14 19:13:39 +08:00
    yyfearth
    yyfearth
    Apr 9, 2016 via iPhone
    1
    看样子 貌似太长了?
    hayao650
    hayao650
    OP
    Apr 9, 2016 via Android
    2
    @yyfearth 应该不是太长了, javascript 的 number 支持很长很长,而且换成 62201604091700700 这种都没问题的
    yxzblue
    yxzblue
    Apr 9, 2016
    3
    楼主的这个数字字符串大于 Number.MAX_SAFE_INTEGER 。

    参考链接:<https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER>。

    怎么解决等楼下的高人吧...
    Exceptionluo
    Exceptionluo
    Apr 9, 2016
    4
    超出了 JS 的安全值范围
    hayao650
    hayao650
    OP
    Apr 9, 2016 via Android
    5
    @Exceptionluo
    @yxzblue
    了解了,谢谢兄弟
    magicdawn
    magicdawn
    Apr 9, 2016
    6
    你的串是 56 位的, IEEE-754 安全值是 2^53 - 1, 怎么解决,拆开表示,或者找找 bigint 库,里面应该也是拆开表示
    hayao650
    hayao650
    OP
    Apr 9, 2016 via Android
    7
    @magicdawn 谢谢
    ileenhow
    ileenhow
    Apr 9, 2016
    8
    SoloCompany
    SoloCompany
    Apr 10, 2016 via iPhone
    9
    js 在设计上对整数运算是有天然缺陷的
    因为为了简单它标准规范里面所有数字都是双精度浮点数
    假如它能支持 64bit 整数的话,十进制至少 18 位是没有问题的
    有整数运算要求的可以用 jsbn.js
    这个库很小,用了做 rsa 什么的都是 ok 的
    v2survive
    v2survive
    Apr 10, 2016 via Android
    10
    还要传给后端而前端自己不用这个数字的话,再传到后端的时候可以考虑还是传 string
    hayao650
    hayao650
    OP
    Apr 10, 2016 via Android
    11
    @v2survive 不知道他们为什么用 int ,前端后端都不是我写的,我只是加班无聊的时候帮着看看
    hayao650
    hayao650
    OP
    Apr 10, 2016 via Android
    12
    @SoloCompany 好的,标记一下,学习学习
    hayao650
    hayao650
    OP
    Apr 10, 2016 via Android
    13
    @ileenhow 谢了兄弟
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2092 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 03:46 · PVG 11:46 · LAX 19:46 · JFK 22:46
    ♥ Do have faith in what you're doing.