The decimal point might not be represented by the period character in your current culture.
In general, when performing culture-invariant conversions, it’s best to specify CultureInfo.InvariantCulture as the IFormatProvider argument to the method:
(decimal) Convert.ChangeType(a, typeof(decimal), CultureInfo.InvariantCulture);