2015-06-28 2 views
0

Я не могу преобразовать из строки в десятичную, это значение lblTotal = «110,00 €» Я хочу преобразовать его в десятичный, как его преобразовать?Как я могу преобразовать строку в десятичный

decimal number; 
if(Decimal.TryParse(((Label)e.Item.FindControl("lblTotal")).Text.ToString(), out number)) 
{ 

} 
+0

Я попробовал это, но возвратил false – magdy

+1

проблема - знак, знак разговора без € –

+1

вопрос был совершенно ясный. Это не должно быть проголосовано. –

ответ

2

Вы должны сообщить Decimal.TryParse, что у вас есть символ валюты и какова ваша культура

string test = "110,00€"; 
if(Decimal.TryParse(test, NumberStyles.Currency, CultureInfo.CurrentCulture, out number)) 
{ 
    Console.WriteLine(number); 
} 

Я также рекомендовал бы использовать более оборонительный подход к вашему ВОССТАНОВЛЕНИЮ этикетки для анализа ,

Label lbl = e.Item.FindControl("lblTotal") as Label; 
if(lbl != Null) 
{ 
    ..... 
} 
+0

decimal test = decimal.Parse (((Label) e.Item.FindControl ("lblTotal")). Текст, NumberStyles.Currency, CultureInfo.CurrentCulture); Я пишу это так, но это дает мне исключение – magdy

+1

Каковы настройки вашей культуры? Если ваш CurrentCulture не признает символ евро в качестве символа валюты, вы должны попробовать код, предложенный [Soner Gönül] (http://stackoverflow.com/users/447156/soner-g%c3%b6n%c3%bcl) – Steve

+0

@Steve: Кажется, это работает только в среде с € как знак валюты. – Gustav

3

Если вы не можете разобрать вашу строку, может быть несколько возможностей ..

Прежде всего, Decimal.TryParse использует NumberStyles.Number стиль, и это не включает в себя Currency стиль. Оба являются составными стилями. Вот почему вам нужно использовать другую перегрузку, которая указывает символ валюты и десятичный разделитель.

Во-вторых, ваш Decimal.TryParse использует настройки CurrentCulture по умолчанию. Это означает, что ваш CurrencySymbol не и/или ваш NumberDecimalSeparator не ,.

Как лучшее решение, вы можете CloneCurrentCulture и установить эти свойства с помощью Currency style like;

var clone = (CultureInfo) CultureInfo.CurrentCulture.Clone(); 
clone.NumberFormat.CurrencySymbol = "€"; 
clone.NumberFormat.NumberDecimalSeparator = ","; 
decimal number; 
if(decimal.TryParse(((Label)e.Item.FindControl("lblTotal")).Text, 
        NumberStyles.Currency, clone, out number)) 
{ 
    // You can use number here 
} 
+0

Nice Soner. Не знал о методе «Клон». – Gustav

+0

Я предпочитаю использовать предварительно определенную культуру, а не клонирование. –

0

Вы можете использовать CultureInfo.CreateSpecificCulture с кодом страны, использующим Евро в качестве валюты.

Table of Language Culture Names, Codes, and ISO Values Method.

например, Греция, Ирландия, Италия использует эту валюту.

Просто

decimal resault = decimal.Parse(((Label)e.Item.FindControl("lblTotal")).Text.ToString() 
           ,NumberStyles.Currency 
           ,CultureInfo.CreateSpecificCulture("it-IT")); 

Это будет конвертировать строку "110,00€" правильно десятичную Поскольку Италия использует евро () в качестве валюты.

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

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