The way we generally handle this is by pre-computing the means and standard deviations for each subscale (offline, on prior data). Then, if as long as the distribution is reasonably close to a normal distribution, percentiles can be calculated using z-scores.
Here's a program that does that:
--Percentile Calculator from zscore
--takes zscore where zscore=(value - mean)/standard_deviation as input, produces percentile as output (percentile ranges from 0 to 100)
Here is an example of how to use it: https://www.guidedtrack.com/programs/13585
>> userScore = 4
>> knownMean = 3.61
>> knownStandardDeviation = 2.1
>> zscore = (userScore - knownMean)/knownStandardDeviation
*program: Percentile Calculator from zscore
>> userPercentile = percentile
Your percentile score is {userPercentile}!