2016-01-23 66 views
2

當我使用decimalToString方法來得到我想要的輸出,如:C#ASPX十進制千與逗號和小數點用點

1.234,56 

現在是這樣的:

1234,56 

global.asax.cs我有使用:

var culture = new CultureInfo("sl-SI"); 
Thread.CurrentThread.CurrentCulture = culture; 
Thread.CurrentThread.CurrentUICulture = culture; 
     Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ","; 
     Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator = "."; 

但不起作用。有沒有什麼全球解決方案或如何解決我的問題?

+2

'foo.ToString( 「N2」,培養);' –

+0

然後我需要更多然後1000行來改變代碼。這是唯一的解決方案? – senzacionale

+1

我更喜歡在ToString()中顯式顯式而不改變全局狀態。 –

回答

1

在.net 4.5中,您可以使用CultureInfo其中允許您爲當前AppDomain中的所有線程設置默認文化。

https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.defaultthreadcurrentculture(v=VS.110).aspx

var culture = new CultureInfo("sl-SI"); 

CultureInfo.DefaultThreadCurrentCulture = culture; 
CultureInfo.DefaultThreadCurrentUICulture = culture; 

CultureInfo.DefaultThreadCurrentCulture.NumberFormat.NumberDecimalSeparator = ","; 
CultureInfo.DefaultThreadCurrentCulture.NumberFormat.NumberGroupSeparator = "."; 
+0

中調用的線程不太一樣。謝謝。我的代碼有什麼區別? – senzacionale

+1

您的代碼僅爲當前線程設置了Culture,但如果您將此代碼添加到應用程序的啓動點,它將爲您的應用程序中的所有線程設置默認區域 –

+0

我嘗試過但仍然一樣。數字就像1234,56而不是像1.234,56 – senzacionale

0

將你的代碼Application_BeginRequest在Global.asax文件:

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    var culture = new CultureInfo("sl-SI"); 
    Thread.CurrentThread.CurrentCulture = culture; 
    Thread.CurrentThread.CurrentUICulture = culture; 

    Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ","; 
    Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator = "."; 
} 

更正:

按照傑克死記硬背的建議,在Global.asax中Application_Start方法設置的默認線程的文化:

protected void Application_Start(Object sender, EventArgs e) { 
    // Code goes here 
} 
+0

這是行不通的。任何想法爲什麼? – senzacionale

+0

@senzacionale這段代碼不會工作的原因是因爲ASP.NET在內部使用線程,因此'Application_BeginRequest'中的線程與您的控制器在 –

相關問題