So at the moment, when you get to a high enough zone, the numbers overflow and become infinite. We have Obsidian to slow this down, but it all happens in the end. So my solution is this: an upgrade, unlocked at the zone where the overflow happens, that turns Health, Attack, and Block into Hearts, Swords, and Shields.
The first of each is equal to 1 Health, Attack, or Block, and each one is ten times as valuable as the one before it. Damage dropping Hearts by less that 0.001 would do nothing.
Here is how it would work:
Let's say (just giving easy numbers here) that you have 250 gyms, 96 Gymystic upgrades, 100 trainers, 300% trainer bonus, and the Blockmaster upgrade. Here is how Shields would be calculated.
You have Blockmaster, so that is 0.6 shields to start out.
You have 250 gyms. Multiplying by 250 adds 2.3 shields, so your gyms before Gymystic give 2.9 shields.
96 levels in Gymystic make each Gym give a 100% block bonus. 100% block bonus equals 2 shields. With 250 gyms, this equals 500 shields. You have 503.9 shields.
You also have trainers. 300% bonus means one trainer adds 2.3 shields. From one trainer, you have 506.2 shields.
You have 100 trainers. That makes a 100% multiplier, or two shields.
You have 508.2 shields in total.
If you were using Block instead, you would have 2*10^508, much higher than the integer overflow, but since everything was done with Shields, it works.
Do the same with Attack into Swords and Health into Hearts.
Zones become infinite.