node.js - Display whole number in Javascript -


i have method converts ipv6 address decimal value.

at moment result is:

4.254076641128259e+37 

but need this:

42540766411282592857539836924043198464 

my code:

var ip = '2001:0db8:0:0:8d3:0:0:0'; var address = new v6.address(ip); var bin = address.binaryzeropad(); var dec = 0; (var = 0; < bin.length; i++) {     dec = dec + parseint(bin[i]) * math.pow(2, bin.length - 1 - i); } console.log(dec); 

im using ip-address lib convert ipv6 first binary.

you cannot represent unsigned 128 bit number javascript number without loosing precision. javascript number allows storage of integers 2^53. see what javascript's highest integer value number can go without losing precision?

see 08d3 group has been lost...

var dec = 42540766411282592857539836924043198464; console.log(dec.tostring(16)) // ==> 20010db8000000000000000000000000 

an alternative use library simulate arbitrary large integers, biginteger (wtfpl license).

example corresponding fiddle

var ip = '2001:0db8:0:0:8d3:0:0:0';  // simulate address.binaryzeropad(); method var parts = []; ip.split(":").foreach(function(it) {     var bin = parseint(it, 16).tostring(2);     while (bin.length < 16) {         bin = "0" + bin;     }     parts.push(bin); }) var bin = parts.join("");  // use biginteger library var dec = bigint(bin, 2).tostring(); console.log(dec); 

output

42540766411282592857539836924043198464 

Comments