2010-10-22 114 views
4

我试图与表达无法解析双

double cost = 0; 
double.TryParse("$15,270.75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out cost); 

解析像$ 15,270.75值,但没有成功

+1

你是否收到错误或没有得到你想要的结果? – 2010-10-22 21:37:18

回答

8

不变文化的货币符号不是$,它的¤。这工作:

double cost = double.Parse("¤15,270.75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture); 

你需要支持的正是这种格式的CultureInfo

1

这是因为你正在使用InvariantCulture的。你需要一个美国文化信息

+0

美国人不是唯一使用'$'的人;) – Ozzah 2011-04-04 02:44:36

1

这不适用于CultureInfo.Invariant文化。使用适当的CultureInfo。

4

以下工作:

var culture = new CultureInfo("en-US"); 

culture.NumberFormat.CurrencyGroupSeparator = "."; 
culture.NumberFormat.CurrencyDecimalSeparator = ","; 

double.TryParse("$15.270,75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, culture, out cost); 

我这里使用的文化是EN-US表示$符号。我手动设置组和小数点分隔符的原因是因为输入字符串中使用的格式与en-US的区别不同。

也许你正在期待一种不是en-US的特定文化。尝试通过那一个。

0

如果您想要适用于任何语言环境的内容,请使用CultureInfo.CurrentCulture作为IFormatProvider参数。