【问题标题】:I can't get proper uint32 number in javascript我无法在 javascript 中获得正确的 uint32 数字
【发布时间】:2019-01-24 15:52:14
【问题描述】:

我试图在 JavaScript 中将一个长数字转换为单位,但我得到的结果与我在 c# 中已有的不同。

c#:

var tt=431430059159441001;
var t=(UInt32)tt;//1570754153

js:

var arr =new Uint32Array(1);
arr[0]=431430059159441001;//1570754176

所以任何人都可以解释为什么会有差异。

【问题讨论】:

  • 您的代码给出了CS0221 Constant value '431430059159441001' cannot be converted to a 'uint' (use 'unchecked' syntax to override)。请更新您的问题并添加详细信息,您实际上在使用工作示例做什么。

标签: javascript c# uint


【解决方案1】:

那是因为你的数字字面量是一个 64 位整数,不能用 JavaScript 的常规 Number 类型表示。 number 类型是一个 64 位精度的浮点数,即can only represent integer values up to around 2**53。所以我建议不要使用这么大的数字文字。

JavaScript 世界的最新发展是BigInts。如果您负担得起使用它们,那么您的代码很容易修复:

var t = Number(BigInt.asUintN(32, 431430059159441001n));
console.log(t); // 1570754153

【讨论】:

    【解决方案2】:

    这不是关于 uint,而是关于浮点数。 JavaScript 使用浮点数,而您的数字超出了可以安全表示的最大整数范围:

    console.log(431430059159441001)
    

    【讨论】:

      【解决方案3】:

      您不能将431430059159441001 转换为 中的无符号整数。 UInt32 的最大值是 4294967295。所以var t=(UInt32)431430059159441001; 赋值给编译器错误。

      431430059159441001 也大于浮点数的最大值(javascript 保存浮点格式的数字)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-09
        • 2016-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-11
        • 2023-01-28
        • 1970-01-01
        相关资源
        最近更新 更多