Преобразование строки в десятичную с форматом

Мне нужно преобразовать String в десятичное число в C #, но эта строка имеет разные форматы.

Например:

“50085”

“500,85”

«500,85»

Это должно быть конвертировано для 500,85 в десятичном формате. Есть ли упрощенная форма для этого преобразования с использованием формата?

В то время как decimal.Parse () – это метод, который вы ищете, вам придется предоставить ему немного больше информации. Он не будет автоматически выбирать между тремя форматами, которые вы даете, вам нужно будет указать, какой формат вы ожидаете (в форме IFormatProvider). Обратите внимание, что даже с помощью IFormatProvider я не думаю, что «50085» будет правильно втянут.

Единственное, что я вижу, это то, что из ваших примеров видно, что вы всегда ожидаете двух десятичных знаков точности. Если это так, вы можете удалить все периоды и запятые, а затем разделите их на 100.

Может быть, что-то вроде:

 public decimal? CustomParse(string incomingValue) { decimal val; if (!decimal.TryParse(incomingValue.Replace(",", "").Replace(".", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val)) return null; return val / 100; } 

В некоторых культурах используется запятая для обозначения точки с плавающей точкой. Вы можете проверить это со следующим кодом на странице aspx:

 var x = decimal.Parse("500,85"); Response.Write(x + (decimal)0.15); 

Это дает ответ 501, когда культура streamов настроена на культуру, в которой запятая используется как плавающая точка. Вы можете заставить это так:

 var x = decimal.Parse("500,85", new NumberFormatInfo() { NumberDecimalSeparator = "," }); 

Это будет работать, в зависимости от настроек вашей культуры:

 string s = "500.85"; decimal d = decimal.Parse(s); 

Если ваша культура по умолчанию не разрешает , а не . как десятичная точка, вам, вероятно, понадобится:

 s = s.Replace(',','.'); 

Но нужно будет проверить на несколько . это … похоже, сводится к большей части проблемы санитарии ввода. Если вы можете проверить и дезинформировать входные данные для всех, которые соответствуют набору правил, преобразование в десятичное будет намного проще.

Попробуйте этот код ниже:

 string numValue = "500,85"; System.Globalization.CultureInfo culInfo = new System.Globalization.CultureInfo("fr-FR"); decimal decValue; bool decValid = decimal.TryParse(numValue, System.Globalization.NumberStyles.Number, culInfo.NumberFormat, out decValue); if (decValid) { lblDecNum.Text = Convert.ToString(decValue, culInfo.NumberFormat); } 

Поскольку я даю значение 500,85, я буду считать, что культура французская, и поэтому десятичный разделитель является « , ». Затем decimal.TryParse (numValue, System.Globalization.NumberStyles.Number, culInfo.NumberFormat, out decValue); вернет значение как 500.85 в decValue. Аналогичным образом, если пользователь является английским, то измените конструктор culInfo.

Существует множество способов:

  1. System.Convert.ToDecimal("232.23")
  2. Double.Parse("232.23")
  3. double test; Double.TryParse("232.23", out test)

Удостоверьтесь, что вы пытаетесь поймать …

Это новая функция, называемая символом группировки цифр .

шаги:

  1. Открытый регион и язык в панели управления
  2. Нажмите « Дополнительная настройка»
  3. Вкладка «Числа»
  4. Установите символ группировки цифр в качестве пользовательской настройки. Изменить запятую; замените на (любой символ как от A до Z или {/,}). Символ группировки цифр = e;

Пример:

 string checkFormate = "123e123"; decimal outPut = 0.0M; decimal.TryParse(checkFormate, out outPut); Ans: outPut=123123;