35

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

double a = 0.003;
Console.WriteLine(a);

它打印“0,003”。

如果我有另一段代码:

double a = 0.003;
Console.WriteLine(a.ToString(CultureInfo.InvariantCulture));

它打印“0.003”。

我的问题是我需要一个点作为小数点,但 C# 默认使用逗号。此外,我不想仅仅为了打印出双变量而输入这么长的代码行。

4

7 回答 7

56

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

Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

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

于 2012-10-04T14:50:53.573 回答
24

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

CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.InvariantCulture;
于 2018-09-08T16:44:20.273 回答
9

1 空字符串指定 InvariantCulture 在config.file

默认情况下,Culture 和 UICulture 在配置中设置为“”。

   <system.web>
      <globalization culture="" />
   </system.web>

2 您还可以在您的Thread

于 2012-10-04T14:53:38.837 回答
6

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

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");

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

于 2012-10-04T14:51:53.643 回答
3

当您打电话WriteLine()并给予双倍时,它在内部或多或少地进行了以下调用:

Console.WriteLine(a.ToString(CultureInfo.CurrentCulture));

现在的任务是用CurrentCulture替换InvariantCulture。这可以通过以下代码行来完成:

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

现在你的线程设置了 InvariantCulture 并且你的第一个调用也应该打印“0.003”。

于 2012-10-04T14:53:23.510 回答
3

您可以将CultureInfo.InvariantCulture@Guffa 和其他人设置为如上所示的默认值。

但是您必须清楚地知道为什么要这样做。如果您执行数据导出/导入操作会没问题,但您可能不会将它用于呈现给用户的字符串。

微软文档指出:

不变的文化是文化不敏感的;它与英语相关,但与任何国家/地区无关。您可以在对 CultureInfo 实例化方法的调用中使用空字符串 ("") 按名称指定不变区域性。...

与受用户自定义或 .NET Framework 或操作系统更新影响的文化敏感数据不同,不变的文化数据随着时间的推移和已安装的文化是稳定的,并且不能由用户自定义。这使得不变区域性对于需要与区域性无关的结果的操作特别有用,例如保留格式化数据的格式化和解析操作,或要求数据以固定顺序显示而与区域性无关的排序和排序操作。

于 2013-07-27T04:38:48.600 回答
2

如果您从不希望数字和日期的文化特定格式,您可以设置文化一次,也许在应用程序启动时。

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture

如果它是 ASP.NET 应用程序,更简单的替代方法是在<globalization>web.config 的配置元素中设置区域性。

否则,除了明确指定文化之外,您别无选择。如果您发现自己重复输入相同的长代码行,请按照您在这种情况下经常做的事情:将其包装在一个方法中。

于 2012-10-04T14:53:17.647 回答