В C# я пытаюсь преобразовать строку в десятичную.Преобразование строки в десятичную.
Например, строка «(92,90 USD)»
Как бы вы разобрать это как десятичное с Decimal.Parse СКЛС.
В C# я пытаюсь преобразовать строку в десятичную.Преобразование строки в десятичную.
Например, строка «(92,90 USD)»
Как бы вы разобрать это как десятичное с Decimal.Parse СКЛС.
Я исхожу из предположения, что строка, которую вы пытаетесь проанализировать, является фактическим значением валюты.
CultureInfo c = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
c.NumberFormat.CurrencyNegativePattern = 14; // From MSDN -- no enum values for this
c.NumberFormat.CurrencySymbol = "USD";
decimal d = Decimal.Parse("(USD 92.90)", NumberStyles.Currency, c);
Вы можете начать с reg-exp, чтобы извлечь номерную часть, а затем использовать Decimal.TryParse для синтаксического анализа подстроки.
Сначала введите номер из строки. Regex \d+(.\d+)?
может помочь. Хотя вы можете использовать подстроку, если символы вокруг этого числа всегда одинаковы.
Затем используйте Decimal.Parse (или Double.Parse) на этой строке.
При разборе строки, я всегда предпочитаю использовать TryParse, чтобы избежать исключения бросали недействительных строк:
string str = "(USD 92.90)";
decimal result;
if (Decimal.TryParse(str, out result))
{
// the parse worked
}
else
{
// Invalid string
}
И как уже говорили другие, первым использовать регулярное выражение для извлечения только числовую часть.
+1, я не знал о передаче NumberStyles. Я все равно буду использовать TryParse (я замечаю, что он принимает те же параметры) ... –
Мне это нравится. Хотя, если Валюта изменится? –
@LB: Если вы имеете дело с несколькими валютами, я буду разбирать их по одному за раз. Так как сами ценности действительно не сопоставимы друг с другом (например, 15 долларов США! = CAD 15 долларов США), то, например, несколько бессмысленно размещать их в одном массиве. –