V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Phishion
V2EX  ›  程序员

请问 API 接口字段分发 16 位整数为 Int 类型有啥坑没有

  •  
  •   Phishion · 2021-03-18 14:16:42 +08:00 · 1512 次点击
    这是一个创建于 1353 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就像这样,我想发 id1 这样的类型,不然客户端处理就设计到一系列问题,比如这个 ID 写入 Sqlite 的时候要转换成 Int 类型(要做索引),正常显示的时候就不用转换,ID 需要绑定到 Cell 上也要转换成 Int,请问直接分发 Int 可以嘛?

    {
        "id1": 4216045057949697,
        "id2": "4216045057949697",
        "name": "XXX",
        "album": "YYY"
    }
    
    
    8 条回复    2021-03-18 19:25:47 +08:00
    kaiki
        1
    kaiki  
       2021-03-18 14:20:41 +08:00
    该客户端做的事就让客户端做啊
    ysc3839
        2
    ysc3839  
       2021-03-18 14:34:09 +08:00 via Android   ❤️ 1
    一开始我还以为是 16 个二进制位长的整数,这种情况用 id1 的方法一般是没问题的。
    但实际上说的是 16 个字符长的整数,在 JSON 里写过长的整数,有的解析库可能会使用小数运算导致丢失数据。比如在 js 中不能大于 Number.MAX_SAFE_INTEGER 。
    ragnaroks
        3
    ragnaroks  
       2021-03-18 16:26:00 +08:00   ❤️ 1
    Int32 的话放心用,Int64 还是用字符串吧
    Phishion
        4
    Phishion  
    OP
       2021-03-18 17:48:20 +08:00
    @ragnaroks 请问 Int64 的话会有什么问题呢?
    killergun
        5
    killergun  
       2021-03-18 18:23:26 +08:00
    @Phishion 数字过大 js 处理会有问题。需要单独处理
    securityCoding
        6
    securityCoding  
       2021-03-18 18:55:46 +08:00
    @Phishion 溢出,丢失精度
    dalei
        7
    dalei  
       2021-03-18 19:21:49 +08:00
    @Phishion js number 类型,用的浮点数存储的。整数范围小于 int64.
    Phishion
        8
    Phishion  
    OP
       2021-03-18 19:25:47 +08:00
    @securityCoding
    @killergun
    @dalei

    好的,谢谢解答!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2593 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 06:11 · PVG 14:11 · LAX 22:11 · JFK 01:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.