如何一步将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.514680845402702E1
或4.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);
我正在使用 MdxClient which internally parses XML documents returned by AdomdCommand.ExecuteXmlReader
。一些值返回为 xsd:double
,但我希望它们在客户端返回为 decimal
。
这个解析值的库使用 Convert.ChangeType
方法。但是有些xsd:double
字符串如3.514680845402702E1
或4.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);