Парсинг десятичного числа от DataReader

Простое решение для полного пути:

import sys
sys.path.insert(0,'C:\\Users\\user01\\Desktop\\pipeline')
from folder1.folder2.filename import function_name

это импортирует функцию "function_name" из: C:\Users\user01\Desktop\pipeline\folder1\folder2\filename

6
задан royse41 21 October 2013 в 08:47
поделиться

3 ответа

Мне это совсем не кажется странным.

Decimal.Parse () предполагается для выдачи исключения для неверных форматов. Decimal.TryParse () не вызовет это исключение, а просто вернет false. Проблема в том, что вы не проверяете возвращаемое значение из Decimal.TryParse () . Я дам вам хорошие шансы, что Decimal.TryParse () вернет false для каждого ввода, вызывающего исключение с Decimal.Parse () , и истинно везде в остальном. И когда Decimal.TryParse () возвращает false, выходной аргумент всегда равен «0».

Единственное возможное предупреждение - это локализация. Если Decimal.Parse () жалуется на кажущийся нормальный ввод, вы можете проверить, используется ли в числовом формате (текущая культура), используемом на вашем сервере, запятую, а не десятичную дробь, чтобы отделить коэффициент от мантиссы. Но, учитывая, что ваш тест "4.0" работал нормально, я сомневаюсь, что это проблема.

Наконец, при выполнении этого преобразования из средства чтения данных вы должны учитывать тип исходного столбца средства чтения данных. Если уже может быть десятичным числом. Зачем преобразовывать его в строку только для того, чтобы преобразовать обратно?

11
ответ дан 8 December 2019 в 16:06
поделиться

Вы говорите следующее:

    // this works absolutly fine?!
    decimal _rating = 0;
    decimal.TryParse(DataReader["Rating"].ToString(), out _rating);

Но вы фактически не проверяли возвращаемое значение TryParse. Я предполагаю, что ваш TryParse на самом деле дает сбой (возвращает false), поскольку decimal.Parse и decimal.TryParse используют одни и те же «правила» для синтаксического анализа, учитывая используемые вами перегрузки.

Я подозреваю, что ни один из них не работает так, как вы считать. Оба, вероятно, не работают, но TryParse не сработает.

2
ответ дан 8 December 2019 в 16:06
поделиться

Измените свой TryParse на это и попробуйте еще раз:

if (!decimal.TryParse(DataReader["Rating"].ToString(), out _rating))
{
  throw new Exception("Input string was not in a correct format");
}

Держу пари, это бросает ...

0
ответ дан 8 December 2019 в 16:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: