如何一步将xsd:double字符串转换为十进制

How to convert xsd:double string to decimal in one step

我正在使用 MdxClient which internally parses XML documents returned by AdomdCommand.ExecuteXmlReader。一些值返回为 xsd:double,但我希望它们在客户端返回为 decimal

这个解析值的库使用 Convert.ChangeType 方法。但是有些xsd:double字符串如3.514680845402702E14.058719395866455E1无法转换为decimal:

var result = Convert.ChangeType("3.514680845402702E1", typeof(decimal), CultureInfo.InvariantCulture);

抛出 FormatException.

我知道我可以分两步转换它:

var tmp = Convert.ChangeType("3.514680845402702E1", typeof(double), CultureInfo.InvariantCulture);
var result2 = Convert.ChangeType(tmp, typeof(decimal), CultureInfo.InvariantCulture);

但我想知道是否可以一步到位?也许通过提供自定义 IFormatProvider 实现作为第三个参数?有什么想法吗?

你必须使用 Convert.ChangeType(...) 吗?

如果您只想转换包含指数表示法格式的数字的字符串,您可以执行以下操作:

var result = decimal.Parse("3.514680845402702E1", System.Globalization.NumberStyles.Float);