0

我正在使用MdxClient,它在内部解析由AdomdCommand.ExecuteXmlReader. 一些值返回为xsd:double,但我希望它们decimal在客户端。

这个解析值的库使用Convert.ChangeType方法。但是某些xsd:double字符串,例如3.514680845402702E1or4.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实现作为第三个参数?有任何想法吗?

4

1 回答 1

3

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

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

var result = decimal.Parse("3.514680845402702E1", System.Globalization.NumberStyles.Float);
于 2015-02-19T15:49:39.597 回答