Other idea: use a tiered currency system, one that uses larger units of measurement as the amount of money increases.
Think of it this way. Imagine you kept track of all your money in pennies. For a few cents, pennies will manage just fine. Though as the amount increases, counting by pennies alone becomes cumbersome and slow. Units such as dimes, quarters, and ultimately dollars start to come in handy to make the system much quicker to count, and more efficient.
In StarMade, the standard credit is currently the only unit of measurement. If a player were to reach a certain amount of credits (let's just say 1 billion for now), then their 'balance' would transition from saying "1,000,000,000C" to "1B, 0C" (B for billions, C for individual credits). From there it would continue to add by Cs until another billion is reached. (2B, xC then 3B, xC etc.) Once a billion Bs are attained, the format would transition yet again to "1Q, 0B, 0C" (Q for quintillion). From there you could just keep going, adding new levels of currency for each subsequent number of billions of billions. The units (C, B, Q etc.) don't need to be the same as what I've used, as these are only for the sake of example.
*Note* The use of the placeholders "0C" or "0B" are included in this example primarily to show the concept more clearly. If the value for a given tier is only zero, it would also make sense to omit that tier in the window entirely (e.g. 1Q, 0B, 500C becomes 1Q, 500C).
The coding behind this would be rather simple. Instead of using a single int variable to measure credits, a single ArrayList of Integers could be used to keep track not only of each tier's amount, but also the total number of needed tiers. Each element's value would be the amount, and its respective index would be its tier level. Once an element shows that it is equal to X value (I said 1 billion, though this could be something that can be changed via the server properties), it will reset that element's value back to zero, and increment the following element by 1. (Or add a new element with a value of 1 if the tier had not previously been reached.) Likewise, when a player pays at a shop and causes their balance to dip below their highest tier, the last element of the ArrayList will be removed, and the difference subtracted from the element before it.
This is just my take on how this problem could be solved. I don't claim it to be the best solution, just a solution. If anyone has anything to add, or has a question, feel free to say something.