我正在尝试将长整数转换为JavaScript中的单位,但结果却与c#中已有的数字不同。
c#:
var tt=431430059159441001;
var t=(UInt32)tt;//1570754153
js:
var arr =new Uint32Array(1);
arr[0]=431430059159441001;//1570754176
任何人都可以解释为什么存在差异。
答案 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)
您无法将c#中的431430059159441001
转换为无符号整数。 UInt32
的最大值为4294967295
。因此,var t=(UInt32)431430059159441001;
分配会产生编译器错误。
431430059159441001
也比浮点数的最大值大(javascript持有浮点数格式的数字)