我无法在 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
转换为 c# 中的无符号整数。 UInt32
的最大值为 4294967295
。所以 var t=(UInt32)431430059159441001;
赋值给出了编译器错误。
也 431430059159441001
大于浮点数的最大值(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
转换为 c# 中的无符号整数。 UInt32
的最大值为 4294967295
。所以 var t=(UInt32)431430059159441001;
赋值给出了编译器错误。
也 431430059159441001
大于浮点数的最大值(javascript 以浮点格式保存数字)