Как преобразовать xsd: двойную строку в десятичную за один шаг
Я использую MdxClient, который внутренне анализирует XML-документы, возвращенные 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 в качестве третьего аргумента? Есть идеи?
1 ответ
Вы должны использовать Convert.ChangeType(...)
?
Если вы просто хотите преобразовать строку, содержащую число, отформатированное в экспоненциальной записи, вы можете сделать следующее:
var result = decimal.Parse("3.514680845402702E1", System.Globalization.NumberStyles.Float);