Как преобразовать 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);
Другие вопросы по тегам