2013-06-03 1 views
3

Входная строка в текстовом поле составляет, скажем, 10,00 $. Я называюdecimal.TryParse возвращает false

decimal result; 
var a = decimal.TryParse(text, NumberStyles.AllowCurrencySymbol, cultureInfo, out result); 

cultureInfo известен (en-US). Почему decimal.tryParse возвращает false?

спасибо.

+2

Внешний ресурс от MS, который объясняет, как анализировать различные форматы, включая ваш образец. http://msdn.microsoft.com/en-us/library/9zbda557.aspx – CSharpConductor

+4

«AllowCurrencySymbol», как вы написали, означает, что ** означает ** только символ валюты. –

ответ

9

Проблемы вы позволили символ валюты сам по себе, но вы опущены другим свойствам, (. десятичную точку, например) необходимо правильно разобрать его, что вы действительно хотите NumberStyles.Currency:

decimal.TryParse("$10.00", NumberStyles.Currency, cultureInfo, out result); 
2

Попробуйте, вам необходимо включить NumberStyles.Number в комбинации побитовых значений для style аргумента:

decimal result; 
var a = decimal.TryParse(text, NumberStyles.Number | NumberStyles.AllowCurrencySymbol, cultureInfo, out result); 
0

вы забыли разрешить десятичную точку, тоже:

decimal result; 
var enUS = new System.Globalization.CultureInfo("en-US"); 
var a = decimal.TryParse("$10.00", System.Globalization.NumberStyles.AllowCurrencySymbol | System.Globalization.NumberStyles.AllowDecimalPoint , enUS, out result); 

Console.WriteLine(enUS); 
Console.WriteLine(a); 
Console.WriteLine(result); 
Смежные вопросы