Reputation: 63
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.
Upvotes: 1
Views: 4292
Reputation: 30585
You cannot convert 431430059159441001
to unsigned integer in c#. 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)
Upvotes: 1
Reputation: 29926
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 BigInts. 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
Upvotes: 5
Reputation: 138307
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)
Upvotes: 1