如何设置CultureInfo.InvariantCulture默认?

nht*_*rnm 21 c# double

当我在C#中有这样的代码时:

double a = 0.003;
Console.WriteLine(a);
Run Code Online (Sandbox Code Playgroud)

它打印"0,003".

如果我有另一段代码:

double a = 0.003;
Console.WriteLine(a.ToString(CultureInfo.InvariantCulture));
Run Code Online (Sandbox Code Playgroud)

它打印"0.003".

我的问题是我需要一个点作为十进制标记,但C#默认使用逗号.此外,我不想只打印出一个双变量来输入如此长的代码.

Guf*_*ffa 36

您可以将当前线程的文化设置为您想要的任何文化:

Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
Run Code Online (Sandbox Code Playgroud)

请注意,更改文化还会影响字符串比较和排序,日期格式以及日期和数字的分析等内容.

  • @Rapunzo:您可以将它放在为每个请求运行的任何位置,例如在`global.asax`中的`Application_BeginRequest`中,或者在页面类的第一个事件中. (4认同)
  • @JanHudec:启动新线程时不会继承文化,`Thread` 类中有一个静态成员,用于确定新线程的文化。更多阅读:http://blog.rastating.com/setting-default-currentculture-in-all-versions-of-net/ (3认同)
  • 在我的项目中到底应该在哪里写这段代码? (2认同)

Mar*_*gur 8

自.NET Framework 4.5版和.NET Core / Standard 1.0版以来,您可以通过修改CultureInfo.DefaultThreadCurrentCultureCultureInfo.DefaultThreadCurrentUICulture属性来更改整个应用程序的区域性,而不仅仅是当前线程。

CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.InvariantCulture;
Run Code Online (Sandbox Code Playgroud)


Ash*_*nko 6

默认情况下,C# 不会将其设为逗号,这是您的文化。尝试明确设置文化,

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Run Code Online (Sandbox Code Playgroud)

链接:http : //msdn.microsoft.com/en-us/library/ms425914(v=office.12).aspx


Agh*_*oub 5

1空字符串指定InvariantCulture config.file

默认情况下,在配置中将Culture和UICulture设置为"".

   <system.web>
      <globalization culture="" />
   </system.web>
Run Code Online (Sandbox Code Playgroud)

2你也可以定义你的 Thread