C# .NET Framework 4.0中的语言和区域设置

C# .NET Framework 4.0中的语言和区域设置,c#,.net,localization,number-formatting,C#,.net,Localization,Number Formatting,我们有一个Winform应用程序,它从数据库中获取一些数值。当windows的用户版本为英语时,此功能可以正常工作。所以数字格式都是完美的。但是,当在Windows 7中以葡萄牙语为基础语言(葡萄牙语-巴西)打开同一应用程序时,数字的格式都是错误的。这是因为美国英语和葡萄牙语的数字格式完全不同 最近在.NET Framework 4.0中出现了这种变化,因为应用程序在使用2.0 Framework构建时运行良好 例如,数字“000”将显示为1.000,00,在运行葡萄牙语版本windows的系统

我们有一个Winform应用程序,它从数据库中获取一些数值。当windows的用户版本为英语时,此功能可以正常工作。所以数字格式都是完美的。但是,当在Windows 7中以葡萄牙语为基础语言(葡萄牙语-巴西)打开同一应用程序时,数字的格式都是错误的。这是因为美国英语和葡萄牙语的数字格式完全不同

最近在.NET Framework 4.0中出现了这种变化,因为应用程序在使用2.0 Framework构建时运行良好

例如,数字“000”将显示为1.000,00,在运行葡萄牙语版本windows的系统中,该数字将被解释为1

中文:1000.00=千

葡萄牙语:1.000,00=千

有人能告诉我如何解决这个问题,或者什么是正确的方法来强制应用程序使用数据库值,而不是将它们格式化到本地用户系统?用户对以美国格式显示的数字表示满意

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
这将重置区域性,并在表单/程序开始时使用它

您可以同时尝试这两种方法,因为我不确定哪种方法有效

显示的数字的格式(delimeters和spaces)取决于它们的字符串表示方式。小数存储在DB或内存中,没有delimeters(显然),它们在硬盘上只有128位(粗略地说)。当您尝试显示它们时,该格式将进入作用域。如果您的号码以正确的数字格式存储在DB中,那么这应该不是问题

如果在某个地方尝试将字符串转换为数字,则可能会出现此问题。例如,如果您将值作为字符串存储在db中(我希望您不要)。在这种情况下,您应该在每次将数字转换为字符串时指定格式提供程序,反之亦然。 例如:

decimal.Parse(numberAsString, CultureInfo.InvariantCulture); // 1
decimalNumber.ToString(CultureInfo.InvariantCulture); // 2

一段代码片段,显示您如何从数据库中读取数值并将其传递给演示文稿,这会很有帮助。第一个选项(en-us)非常有效。谢谢你,乔治。
decimal.Parse(numberAsString, CultureInfo.InvariantCulture); // 1
decimalNumber.ToString(CultureInfo.InvariantCulture); // 2