2012-12-14 23 views
17

Bunu neden çalışmadığını hiçbir fikrim yok:Dize ile para birimi sembolü ile nasıl ayrıştırılır?

string s = "12,00 €"; 
var germanCulture = CultureInfo.CreateSpecificCulture("de-DE"); 
decimal d; 
if (decimal.TryParse(s, NumberStyles.AllowCurrencySymbol, germanCulture, out d)) 
{ 
    // i want to get to this point 
    Console.WriteLine("Decimal value: {0}", d); 
} 

cevap

27

kullanın NumberStyles.Currency yerine NumberStyles.AllowCurrencySymbol

if (decimal.TryParse(s, NumberStyles.Currency, germanCulture, out d)) 

ve size kodun çıktısı olacaktır:

Decimal value: 12.00 
+0

Çok teşekkürler :) –

+0

@TimSchmelter, Rica ederiz :) bu durumun nedenlerini – Habib

+6

Biraz daha bilgi açıklamak için: NumberStyles.AllowCurrencySymbol sadece ayrıştırma sürecinin bir parçası olarak göz ardı edilecek para birimi sembolü izin verir. Ek boşluk ve ondalık ayırıcı, bunları etkinleştirmek için ek bayraklar gerektirir: AllowDecimalPoint ve AllowTrailingWhite. Para birimi bu bayrakları (ve diğer birkaçını) birleştirir. [Link] (http://msdn.microsoft.com/en-us/library/0xh24xh4.aspx) –

0

bu deneyin;

string.Format(new CultureInfo("en-SG", false), "{0:c0}", 123423.083234); 

123423.083234'ü 1,23,423 biçemine dönüştürür.

+1

Ondalık bir para birimi simgesi içeren bir dize ayrıştırmak gerekiyordu. Belirli bir ondalık değeri dizeye dönüştürüyorsunuz. Yani bu farklı bir gereklilik. Ancak, zaten yanıtladı. –