Преобразование экспоненциальной строки в десятичную в Datatable Select - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь преобразовать экспоненциальное строковое значение в десятичное и сравнить его с другим десятичным значением в функции Select, имеющей данные.

var dt = new DataTable();
dt.Columns.Add("Salary", typeof(string));
dt.Rows.Add("8.83567E-05");

string userInput = "8.83567E-05";

var matchedRows = dt.Select("Convert([Salary],'System.Decimal') = " + Decimal.Parse(userInput, System.Globalization.NumberStyles.Float));

Но я получил следующую ошибку

System.FormatException: 'Входная строка была в неправильном формате.'

Так что послеВ некоторых исследованиях я обнаружил, что использование System.Double будет работать в моем случае

var matchedRows = dt.Select("Convert([Salary],'System.Double') = " + Decimal.Parse(userInput, System.Globalization.NumberStyles.Float));

, и это сработало.

Но я не хочу использовать double, поскольку он приблизительно сохраняет данные. Мои данные могут содержать до 10 знаков после запятой.

Есть ли способ преобразовать строковое экспоненциальное строковое значение в десятичный тип данных? или безопасно использовать double в моем случае?

1 Ответ

1 голос
/ 09 октября 2019

Согласно документации Microsoft , использование double является правильным способом.
(Свойство Expression использует тот же синтаксис, что и фильтр в методе Select метода DataTable)

Реальные литералы, использующие научные обозначения, такие как 4.42372E-30, анализируются с использованием System.Double.

Реальные литералы без научного обозначения, но с десятичной точкой рассматриваются как система. Десятичный. Если число превышает максимальное или минимальное значение, поддерживаемое System.Decimal, то оно анализируется как System.Double. Например:

142526.144524 будет преобразовано в десятичное число.

345262.78036719560925667 будет считаться двойным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...