我无法在JavaScript中获得正确的uint32号

时间:2019-01-24 15:52:14

标签: javascript c# uint

我正在尝试将长整数转换为JavaScript中的单位,但结果却与c#中已有的数字不同。

c#:

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

js:

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

任何人都可以解释为什么存在差异。

3 个答案:

答案 0 :(得分:2)

那是因为您的数字文字是一个64位整数,并且不能用JavaScript常规Number类型表示。数字类型是一个64位精度的浮点数,can only represent integer values up to around 2**53。因此,我建议不要使用如此大量的数字。

JavaScript世界的最新发展是BigInt s。如果您有能力使用它们,那么您的代码很容易修复:

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

答案 1 :(得分:1)

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

console.log(431430059159441001)

答案 2 :(得分:1)

您无法将中的431430059159441001转换为无符号整数。 UInt32的最大值为4294967295。因此,var t=(UInt32)431430059159441001;分配会产生编译器错误。

431430059159441001也比浮点数的最大值大(javascript持有浮点数格式的数字)