代码之家  ›  专栏  ›  技术社区  ›  Ilia Ross

是什么让长整型数值(16+个字符)在JavaScript中发生变异?[副本]

  •  0
  • Ilia Ross  · 技术社区  · 7 年前

    为什么JavaScript中会出现以下情况?

    let x212 = 154688977320418212;
    // returns 154688977320418200
    
    let x230 = 154688977320418230;
    // returns 154688977320418240
    
    let x256 = 154688977320418256;
    // returns 154688977320418240
    
    let x257 = 154688977320418257;
    // returns 154688977320418270
    

    这是否意味着如果不将长整数值转换为字符串,就无法存储长整数值?

    1 回复  |  直到 7 年前
        1
  •  1
  •   rap-2-h    7 年前

    在JavaScript中,所有数字都是64位 .

    尾数的大小大约是53位,这意味着你的数字, 154688977320418257 不可能 确切地 表示为JavaScript数字。你看到的是一个近似值,因为它是一个比 MAX_SAFE_INTEGER (即9007199254740991)。

    如果您确实需要大的数字,可以使用lib,例如 https://github.com/peterolson/BigInteger.js