繁体   English   中英

我无法在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

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

这是因为您的数字文字是一个64位整数,并且不能用JavaScript的常规数字类型表示。 数字类型是64位精度的浮点数,它只能表示最大约2**53整数值 因此,我建议不要使用如此大量的数字。

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

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

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

console.log(431430059159441001)

您无法在 431430059159441001转换为无符号整数。 UInt32最大值是4294967295 因此var t=(UInt32)431430059159441001; 分配会给出编译器错误。

431430059159441001大于浮点数的最大值(javascript持有浮点数格式的数字)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM