2010-06-28 31 views
35

Ondalık noktayı C# içindeki başka bir karaktere değiştirmek isterim. Ben double değişken valueÇiftde ondalık nokta için sembol nasıl değiştirilir.ToString()?

double value; 

var ve komutu kullandığınızda:

Console.WriteLine(value.ToString()); // output is 1,25 

ben bunu yapabilirsiniz biliyorum:

Console.WriteLine(value.ToString(
    CultureInfo.CreateSpecificCulture("en-GB"))); // output is 1.25 

ama ben çok sevmiyorum çünkü çok uzun ve programıma çok sık ihtiyacım var.

"Ondalık nokta" ayarını, kültürümdeki gibi normalde virgülle değil, nokta olarak ayarlamak için daha kısa bir sürüm var mı?

cevap

77

Bazı kısayollar bir NumberFormatInfo sınıfı oluşturmak, NumberDecimalSeparator özelliğini "." olarak ayarlamaktır. ve ihtiyaç duyduğunuzda sınıfı ToString() yöntemine parametre olarak kullanın.

NumberFormatInfo nfi = new NumberFormatInfo(); 
nfi.NumberDecimalSeparator = "."; 

value.ToString(nfi); 
+2

Bu yöntemi daha çok dilinden bağımsız olarak beğeniyorum! –

15

Belki de sorunuzun amacını yanlış anlıyorum, bu yüzden yanlış olduğumda beni düzeltin, ancak kültür ayarlarını global olarak bir kez uygulayamıyor musunuz, ve sonra her bir yazım ifadesini özelleştirmek konusunda endişelenmiyor musunuz?

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB"); 
+0

Eh, tüm programda ondalık noktaların beklendiği WPF'de PathGeometry biçimini sığdırmak için ona ihtiyacım yok. Fakat bu çözümün başka hiçbir şeye zarar vermediği ortaya çıkıyor. Teşekkür ederim! –

+0

@womp Daha iyi cevap! Bunu ana iş parçacığım için ayarlarsanız alt iş parçacıkları için de geçerli midir? Bu ayarı derlememin tüm yürütme süresi için uygulamak istiyorum. – Bitterblue

32

Uzantı yöntemi yarat?

Console.WriteLine(value.ToGBString()); 

// ... 

public static class DoubleExtensions 
{ 
    public static string ToGBString(this double value) 
    { 
     return value.ToString(CultureInfo.GetCultureInfo("en-GB")); 
    } 
} 
+0

Belki de bir kişi düştü çünkü bu bir cazibe gibi çalışırken, kültürünü küresel olarak kurarak daha güzel bir şekilde yapılabilirdi. Btw. Ben aşağı avcı değilim.:) –

+1

@Thomas: Gerçekten de, OP diyor ki * “Programımda sıklıkla ona ihtiyacım var” *, “* her zaman değil” gibi bir şey demek istedim *. – LukeH

14

Sayıyı görüntülemek için kullanılan kültürü değiştirerek ondalık ayırıcıyı değiştirebilirsiniz. Bununla birlikte, bunun sayı ile ilgili her şeyi değiştireceğini unutmayın (örn. Ayırıcı gruplandırma, gruplama boyutları, ondalık basamak sayısı). Sorunuzdan, ondalık ayırıcı olarak virgül kullanan bir kültüre varsayılan olarak sahip olduğunuz anlaşılıyor.

mevcut kültür en NumberFormatInfo ait NumberDecimalSeparator özelliğini değiştirebilir, kültür değiştirmeden sadece ondalık ayırıcı değiştirin.

Thread.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."; 

Bu, iş parçacığının geçerli kültürünü değiştirir. Artık tüm çıktılar değiştirilecek, yani bir çıktıyı verdiğinizde kültürü değiştirmekten endişe duymadan, istediğiniz formatı çıkarmak için sadece value.ToString() kullanabilirsiniz. Bir Asp.Net web uygulaması varsa

(a neutral kültür onluk ayırıcı değişemez unutmayın.)

+5

Bunu yapmaya çalışırsanız, "Örnek salt okunur" hatası alırsınız. –

+0

@MariusStanescu Bence bu sadece cevabın sonunda belirtildiği gibi adrianbanks olarak bir nuetral kültürü kullanırken olur. – patrickbadley

+0

@patrickbadley Bu çözümü denedim ve "salt okunur" hatasıyla karşılaştım. "Watch penceresi" nde "Culture.IsNeutralCulture" ifadesinin eklenmesi, kültürün tarafsız olmadığını gösterdi. Bununla birlikte, bunun aynı zamanda olduğunu da fark ettim. Kültürü kopyalamak, bu konuda doğru bir yol gibi görünüyor. Aşağıdaki [cevap] bölümüne bakın (http://stackoverflow.com/a/3912937/4625305). – AXMIM

1

, ayrıca bunun boyunca aynı olacak şekilde web.config bunu ayarlayabilirsiniz tüm web uygulaması

<system.web> 
    ... 
    <globalization 
     requestEncoding="utf-8" 
     responseEncoding="utf-8" 
     culture="en-GB" 
     uiCulture="en-GB" 
     enableClientBasedCulture="false"/> 
    ... 
</system.web> 
İlgili konular