9

15955067621307336078.toString(36); returns '3d7vzfy5k2as8' in Javascript because the large integer cannot be represented (the correct answer is '3d7vzfy5k29ou').

Does someone have a clever function that takes a large integer as a string and converts it to base 36?

Meekohi
  • 10,390
  • 6
  • 49
  • 58
  • 2
    @Cameron: http://en.wikipedia.org/wiki/Base_36 – Robert Harvey Nov 26 '12 at 21:44
  • Actually, I get `"3d7vzfy5k2a68"` for `15955067621307336078..toString(36)` – Bergi Nov 26 '12 at 21:53
  • I tried writing my own base conversion function, but it stops working completely after a certain size. http://jsfiddle.net/SEZXq/1/ – HellaMad Nov 26 '12 at 22:08
  • @Bergi - The largest int that JavaScript supports is 9007199254740992. You're number is over that, so the answer you get is determined by how the implementation misbehave when there is overflow. See [this thread](http://stackoverflow.com/a/307200/535871). – Ted Hopp Nov 26 '12 at 22:21

2 Answers2

9

Use this BigInt class, which allows conversion of arbitrarily large integers to any arbitrary base between 2 and 95. Use the bigInt2str() method to perform the conversion.

Robert Harvey
  • 178,213
  • 47
  • 333
  • 501
  • 1
    Thanks this worked great. `bigInt2str(str2bigInt("15955067621307336078",10,0,0),36).toLowerCase();` – Meekohi Nov 26 '12 at 23:36
1

For anyone curious, today we are using https://github.com/MikeMcl/bignumber.js instead.

Meekohi
  • 10,390
  • 6
  • 49
  • 58