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

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

fixPrice = decimal.Parse(mItemParts.Groups["price"].Value.Replace("$", "").Replace(" ", "").Replace("usd", ""));

Значение, из которого я пытаюсь конвертировать: '$ 779.99'

Затем, как только разбор происходит до десятичного числа, я получаю это значение: 77999.

Я хочу получить 779.99 вместо 77999. Спасибо заранее, Laziale

Regex включал: "@" \[^\ "] +?)\" "[^ ~] +? \] +? src=\" " (? [^\ "] +?)\" "? [^ > ] + название = \"? "(? [^ \" "]? +) \" "[^ ~] + цена \" " > (? [^\<]? +)\

4 ответа

Я бы использовал Decimal.TryParse():

decimal parsedDecimal = 0;
string yourCurrency = "$779.99";
bool didParse = Decimal.TryParse(yourCurrency,
 NumberStyles.Currency,
 new CultureInfo("en-US"), out parsedDecimal);
if(didParse) {
 // Parse succeeded
}
else {
 // Parse failed
}


Кажется, что вы запускаете это в культуре, где '.' - разделитель групп, а ',' - десятичный разделитель. Чтобы обойти это, используйте перегрузку Parse, которая принимает значение CultureInfo:

fixPrice = decimal.Parse(stringExpression, CultureInfo.InvariantCulture);

Также просмотрите NumberStyles enum, чтобы вам не пришлось беспокоиться о валютных знаках:

fixPrice = decimal.Parse(stringExpression, NumberStyles.Currency, new CultureInfo("en-US"));


Передайте экземпляр CultureInfo культуры, которую вы анализируете.

CultureInfo наследуется от IFormatProvider

изменить

Вот пример для преобразования

Decimal.Parse(yourValue, NumberStyles.AllowCurrencySymbol |
 NumberStyles.AllowDecimalPoint |
 NumberStyles.AllowThousands,
 CultureInfo.InvariantCulture);


Это работает для меня:

string decStr = "$779.99";
CultureInfo ci = new CultureInfo("en-US");
decimal fixPrice = decimal.Parse(decStr, NumberStyles.Currency, ci);

licensed under cc by-sa 3.0 with attribution.