I think, in CvCity:: processBuilding, the line with the changeCommerceRateModifier call needs to be changed. The modifier gets stored as an integer. Getting the rounding right could be tricky. Normally, Civ 4 rounds integer divisions toward zero. That would mean, however, that adding an Academy before a Library and University results in a different modifier (+133%) than adding the Academy last (+134%) because the rounding errors depend on the order in which the buildings are processed. When a building is removed (negative iChange parameter), one would then have to round up. But if the buildings aren't removed in the same order as they were added, the modifier won't necessarily end up at 0 when all buildings are gone. Well, apart from the WorldBuilder, buildings only get removed by random events.