2009-10-28 3 views

ответ

21

Я исхожу из предположения, что строка, которую вы пытаетесь проанализировать, является фактическим значением валюты.

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);
+1

+1, я не знал о передаче NumberStyles. Я все равно буду использовать TryParse (я замечаю, что он принимает те же параметры) ... –

+0

Мне это нравится. Хотя, если Валюта изменится? –

+1

@LB: Если вы имеете дело с несколькими валютами, я буду разбирать их по одному за раз. Так как сами ценности действительно не сопоставимы друг с другом (например, 15 долларов США! = CAD 15 долларов США), то, например, несколько бессмысленно размещать их в одном массиве. –

6

Вы можете начать с reg-exp, чтобы извлечь номерную часть, а затем использовать Decimal.TryParse для синтаксического анализа подстроки.

1

Сначала введите номер из строки. Regex \d+(.\d+)? может помочь. Хотя вы можете использовать подстроку, если символы вокруг этого числа всегда одинаковы.

Затем используйте Decimal.Parse (или Double.Parse) на этой строке.

0

При разборе строки, я всегда предпочитаю использовать TryParse, чтобы избежать исключения бросали недействительных строк:

 string str = "(USD 92.90)"; 
     decimal result; 
     if (Decimal.TryParse(str, out result)) 
     { 
      // the parse worked 
     } 
     else 
     { 
      // Invalid string 
     } 

И как уже говорили другие, первым использовать регулярное выражение для извлечения только числовую часть.

Смежные вопросы