2009-10-28 182 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 
     } 

正如其他人說,首先使用正則表達式只提取數字部分。

相關問題