2009-10-28 180 views
4

在C#中,我试图将字符串转换为十进制。将字符串转换为十进制

例如,字符串“(92.90美元)”

你会如何分析这一点与Decimal.Parse FCN小数。

回答

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(我注意到它需要相同的参数)... – 2009-10-28 12:52:34

+0

我喜欢这一点。虽然货币如何变化? – 2009-10-28 12:57:54

+1

@LB:如果你在处理多种货币,我会一次解析它们。由于这些数值本身并不是真正可比的(即15美元= 15美元),所以将它们全部放在单个数组中是没有意义的。 – 2009-10-28 13:01:25

6

您可以从reg-exp开始提取数字部分,然后使用Decimal.TryParse解析子字符串。

1

首先,从字符串中获取数字。一个正则表达式\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 
     } 

正如其他人说,首先使用正则表达式只提取数字部分。

相关问题