The formula is indeed like that. All variables below whose name starts with str come from data, I believe.
First you have:
exponentialMultiplier = strVitalityExponentialGrowth^(level-1)
Then there are several levels at which the exponential curve changes:
if level >= strFirstVitalityLeapLevel
exponentialMultilier *= strFirstVatlityLeapGrowth / strVitalityExponentialGrowth
(same for second, third and fourth leap levels)
Then
base = (strVitalityStartingAmount * exponentialMultiplier + strVitalityLinearGrowth) * level
Finally this value is indeed rounded to the closest multiple of 5 for pure aesthetic reasons.
Note that this is merely a snapshot in time of the formula. It's not even from the latest code version (don't have it handy), so it may have already changed in the mean time. It's just to give you an idea.