[英]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
所以任何人都可以解释为什么存在差异。
这是因为您的数字文字是一个64位整数,并且不能用JavaScript的常规数字类型表示。 数字类型是64位精度的浮点数,它只能表示最大约2**53
整数值 。 因此,我建议不要使用如此大量的数字。
JavaScript世界的最新发展是BigInt 。 如果您有能力使用它们,那么您的代码很容易修复:
var t = Number(BigInt.asUintN(32, 431430059159441001n)); console.log(t); // 1570754153
这不是关于单元数,而是关于浮点数。 JavaScript使用浮点数,并且您的数字超出了可以安全表示的整数的最大范围:
console.log(431430059159441001)
您无法在c# 431430059159441001
转换为无符号整数。 UInt32
最大值是4294967295
。 因此var t=(UInt32)431430059159441001;
分配会给出编译器错误。
也431430059159441001
大于浮点数的最大值(javascript持有浮点数格式的数字)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.