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

I can't get proper uint32 number in javascript

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

c#:

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

js:

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

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

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

console.log(431430059159441001)

那是因为您的数字字面量是一个 64 位整数,无法用 JavaScript 的常规 Number type. The number type is a 64-bit precision floating point number, which can only represent integer values up to around 2**53 表示。所以我建议不要使用这么大的数字文字。

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

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

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

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