This is a concept I discovered whilst working on RPS almost 10 years ago..
So it's common knowledge at certain Java communities that the maximum value of a 32-bit signed integer is 2,147,483,647
Why is this an issue? Well because in runescape, when you used to achieve that much exp, it was considered level 99 because they didn't know how to store all the values over that maximum number (2,147,483,647). It used to also affect the max stack for all items.
I assume their immediate solution was to add more signed ints, so 10 would allow you to have 21,474,836,470 exp. This is not the best way to solve this problem as it could require 10 extra Ints for each skill for each player on the server.
What I did for my system was create an interpreter before the number was displayed (client side), on the server side I would implement the other half of the interpretation system which worked like this:
Simba Code:
if (Int > 2,147,483,646) or (Int < LastValue) MaxInts++;
Everytime the 32-bit signed int would breach max value, I would add 1 to my incremental int MaxInts
This meant that I could still keep track of the value but it was quite hard to do any maths with the whole number. I used a binary-style interpretation technique to draw the numbers individually.. To explain it simply, I knew that the max value was 2,147,483,647 so if my MaxInts was 10, I would do 10x7 to display the last digit's multiplied value and work my way through, shortening the number so I could use math on it (remember all of the math has to be <= 2,147,483,647 or you will exceed the max value and lose data)
TLDR; My method only requires 1 extra int per skill, to keep track of how many times the max value is exceeded.
I thought I'd post this here since I haven't actually seen anything about it anywhere else and I was very interested to see other methods that people have used to combat this limitation. If anyone is curious, I can go into more detail and show better code examples of how to use this, just let me know.