简体   繁体   中英

I can't get proper uint32 number in javascript

i am trying to convert a long number to unit in JavaScript, but the result i got it different from the one i already have in c#.

c#:

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

js:

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

so could any body explain why there is difference.

That's because your number literal is rather a 64 bit integer, and that cannot be represented in JavaScripts regular Number type. The number type is a 64-bit precision floating point number, which can only represent integer values up to around 2**53 . So I would recommend to just not use such a huge number literal.

A recent development in the JavaScript world is BigInt s. If you can afford to use them, then your code is easy to fix:

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

This is not about uints, but about floats. JavaScript uses floating point numbers, and your number exceeds the maximum range of integers that can safely be represented:

console.log(431430059159441001)

You cannot convert 431430059159441001 to unsigned integer in . Max Value of UInt32 is 4294967295 . So the var t=(UInt32)431430059159441001; assignment gives Compiler error.

also 431430059159441001 is larger then max value of float number (javascript holds number with float format)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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