I don't think that anybody is going to expect "2.1E-6" as a return value from Random::percent().  Perhaps we should fix that in the API function instead?