2016-01-23 34 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'中的线程与您的控制器在 –

相关问题