2013-03-21 22 views
5

Bin ayırıcıyı çıkarmaya çalışıyorum, bu yüzden bazı kodları deniyorum, ancak atıyor ve istisna.cultureinfo kullanarak bin ayırıcı nasıl kaldırılır?

Convert.ToDouble ("1.234,45") dönüştürme atılır attı ve 'System.FormatException'

ait istisna: Ben vs. Convert.ToDecimal

diyor, Convert.ToDouble ile çalıştı satırından: Convert.ToDouble()

argüman n2 culturinfo kullanır, ama ben de denedim "0.00" ikisi de aynı durum atar

Bütün fikir şöyledir: bin ayırıcının nasıl kaldırılacağı, girişim her zaman bu formatta: 1.234,54 (ondalık ve bin ayırıcı olarak nokta olarak virgül) ... Bunu Textbox GotFocus Etkinliğinde kullanmayı seviyorum. böylece biçim 12345,45

gibi gösterilmesi gereken böylece: 1.254,45 1254,45 olmalı ve 1.254,00 1254,00

//http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx 

CultureInfo ci = CultureInfo.GetCultureInfo("NL-be"); 
NumberFormatInfo nfi = (NumberFormatInfo)ci.NumberFormat.Clone(); 
//Now force thousand separator to be empty string 
nfi.NumberGroupSeparator = ""; 
//Format decimal number to 2 decimal places 
string decimalFormatted = Convert.ToDouble("1.234,45").ToString("0.00", nfi); 
string decimalFormatted = Convert.ToDouble("1.234,45").ToString("n2", nfi); 
+0

Değişmez kültür için: 'Convert.ToDouble (" 1.234,45 ", CultureInfo.InvariantCulture)' else: 'Convert.ToDouble (" 1.234,45 ", CultureInfo.GetCultureInfo (" en-gb ")) – Fendy

+0

satır kodu aynı hatayı verir. – ethem

cevap

6

dönüşüm ile kültür belirtin olmalı ve aynı şekilde çalışacaktır :

CultureInfo ci = CultureInfo.GetCultureInfo("NL-be"); 
double d = Convert.ToDouble("1.234,45", ci); 
+0

teşekkürler bu kod benim için çalışıyordu. ama nasıl çalışır? çünkü NL-be bir DOT bin ayırıcıya sahip olduğu için bu nokta hala göstermelidir. – ethem

+0

@mesut, 'Gösteriyi göster' ile ne demek istediğini anlamadım? – Habib

+0

"@ Habib": Bir sorun görüyorum: kural, virgülden sonra ondalık bir şeydir, herşey 1 numaralı durum dışında iyi çalışır: eğer 1234,00 yazıyorsam ve ayrılırsa (yapar: 123.400,00) ve 1234,56 yazdığımda 123.456,00 yapar) ... bu yüzden ondalık olarak virgül kullandığım zaman sonuç iyi değil ... eğer 1234.56 yazıyorsam, 1.234,56 iyi yazıyor. Peki 1234,56'yı nasıl düzeltebilirim? 123.456,00 yapmamalı ama 1.234,56 yapmalı. ve ayrıca 12,34 türünde 1234,00 olur. lütfen tavsiye? System.Globalization kullanarak ' – ethem

3

Görüşmeleriniz 01'ebir format belirtmiyor.

string decimalFormatted = Convert.ToDouble("1.234,45").ToString("n2", nfi); 

eşdeğerdir:: Bu unutmamak gerekir

double tmp = string decimalFormatted = Convert.ToDouble("1.234,45"); 
string decimalFormatted = tmp.ToString("n2", nfi); 

Bu başarısız oluyor ilk satırı değil, ikinci ... ve ilk satırdaki, sadece kullanacak güncel iplik kültürü.

Bunun yerine Double.Parse kullanın ve biçimi burada belirtin. (Onun yerine Convert.ToDouble kullanabilirsiniz, ama genellikle daha türe özgü Double.Parse vb aramaları tercih ederim. Size TryParse vb taşırsanız değiştirmek için daha az olduğu anlamına geliyor) Ayrıcadecimal yerine double eğer kullanmayı düşünün gerektiğini

kesin rakamlar önemlidir. Örneğin, bu bir para birimi değeri ise, mantıksal olarak double numaradan decimal numaradan daha fazladır.