I'm using MdxClient which internally parses XML documents returned by AdomdCommand.ExecuteXmlReader. Some of values are returned as xsd:double, but I want them as decimal at client side.
This library to parse values uses Convert.ChangeType method. But some of xsd:double strings such as 3.514680845402702E1 or 4.058719395866455E1 cannot been converted to decimal:
var result = Convert.ChangeType("3.514680845402702E1", typeof(decimal), CultureInfo.InvariantCulture);
throws FormatException.
I know I can convert it in two steps:
var tmp = Convert.ChangeType("3.514680845402702E1", typeof(double), CultureInfo.InvariantCulture);
var result2 = Convert.ChangeType(tmp, typeof(decimal), CultureInfo.InvariantCulture);
but I'm wondering if it's possible in one step? Maybe by providing custom IFormatProvider implementation as third argument? Any ideas?
Do you have to use
Convert.ChangeType(...)?If you simply want to convert a string containing a number formatted in Exponential Notation, you can do the following: