我在我的应用程序中找到了一个错误,该错误发生在默认小数符号是逗号而不是句号的国家/地区。在C#中是否有任何方法可以为我的应用程序设置小数符号而不影响其他应用程序或永久更改系统设置? 我尝试了这个,但它说NumberDecimalSeparator是readonly。
Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ".";
答案 0 :(得分:2)
我仍然需要这样做,你可以像这样更改线程上的CurrentCulture:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-Us");
Chooe具有您需要的小数属性的Culture。
var numpre = 1.1.ToString();
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-Us");
var numpost = 1.1.ToString();
numpre.Dump();
numpost.Dump();
输出:
1,1
1.1
答案 1 :(得分:1)
根据具体情况,正确的做法可能不是尝试强制执行格式,而是让应用程序了解区域设置并将其考虑在内。这是非常容易做到的事情,因为.NET已经全部实现了(否则它将是一场噩梦)。
我想说有两种情况要处理:数据可以从一台机器传递到另一台机器(一些存储的数据,一个文件,一个脚本等),以及什么时候不应该(一个视觉反馈) ,值域等。)。
当涉及可以从一台计算机传递到另一台计算机的数据时,您必须选择与文化无关的格式。这将保证机器使用相同的格式并以相同的方式解释给定的数据,而不管机器用户设置如何。这就是编程语言所做的,而且似乎就是你的情况。
.NET库为此提供CultureInfo.InvariantCulture
:
double x = 0.0;
double.TryParse(source, NumberStyles.Float, CultureInfo.InvariantCulture, out x);
string str = x.ToString(CultureInfo.InvariantCulture);
当涉及到本地信息时,您应该使用他的语言环境来读取和写入用户的语言,以解析输入(文本字段)中的数字并在输出中对其进行格式化。这往往被忽视,但我认为这是非常重要的一点,因为像1,234.567这样的数字将根据文化具有根本不同的含义。例如,请参阅Microsoft Excel等软件如何表示,并根据您的环境设置以不同方式输入数字。
在这种情况下,上面的代码片段将成为:
double x = 0.0;
double.TryParse(source, NumberStyles.Float, CultureInfo.CurrentUICulture, out x);
string str = x.ToString(CultureInfo.CurrentUICulture);
有关MSDN文档的更多信息,请参阅: http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx