我无法在 javascript 中获得正确的 uint32 数字

Gha*_*agh 1 javascript c# uint

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

C#:

var tt=431430059159441001;
var t=(UInt32)tt;//1570754153
Run Code Online (Sandbox Code Playgroud)

js:

var arr =new Uint32Array(1);
arr[0]=431430059159441001;//1570754176
Run Code Online (Sandbox Code Playgroud)

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

Tam*_*dus 5

这是因为您的数字文字是 64 位整数,并且无法用 JavaScript 常规数字类型表示。number类型为64位精度浮点数,只能表示最大到 左右的整数值2**53。所以我建议不要使用这么大的数字文字。

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

var t = Number(BigInt.asUintN(32, 431430059159441001n));
console.log(t); // 1570754153
Run Code Online (Sandbox Code Playgroud)