Подтвердить что ты не робот

Decimal.Parse и неправильная ошибка формата строки

У меня есть простая проблема с десятичным разбором. Следующий код отлично работает на моем компьютере, но когда я публикую проект на сервере (VPS, Windows Server 2008 R2 стандартная версия), я получаю сообщение об ошибке "Строка ввода была в неправильном формате". Любые идеи, что неправильно?

Я храню этот анализируемый номер в таблице DB DB - тип столбца DECIMAL(10, 4)

Исходный код:

CultureInfo nonInvariantCulture = new CultureInfo("en-AU"); //or pl-PL
nonInvariantCulture.NumberFormat.NumberDecimalSeparator = ".";
Thread.CurrentThread.CurrentCulture = nonInvariantCulture;
string toConvert = ("3,4589").Replace(",", "."); //it an example
decimal parsed = decimal.Parse(toConvert);
4b9b3361

Ответ 1

Если вы знаете, что строковое представление числа использует запятую в качестве разделителя десятичных чисел, вы можете проанализировать значение с помощью пользовательского NumberFormatInfo:

var number = "3,4589";
var numberFormatInfo = new NumberFormatInfo { NumberDecimalSeparator = "," };
var value = Decimal.Parse(number, numberFormatInfo);

Вы также можете использовать существующий CultureInfo для культуры, которая, как вы знаете, будет работать как pl-PL, но я думаю, что это проще понять.

Если, с другой стороны, формат номера 3.4589, вы можете просто использовать CultureInfo.InvariantCulture, который вы можете рассматривать как "культуру по умолчанию" на основе en-US:

var number = "3.4589";
var value = Decimal.Parse(number, CultureInfo.InvariantCulture);

Ответ 2

Вы можете создать пользовательский NumberFormatInfo для анализа вашего значения

что-то в этих строках

NumberFormatInfo numinf = new NumberFormatInfo();
numinf.NumberDecimalSeparator= ",";    
decimal.Parse("3,4589", numinf);

Ответ 3

Я думаю, что для работы над приведенным ниже кодом будет решена проблема.

decimal parsed = decimal.Parse(toConvert, CultureInfo.InvariantCulture);