【问题标题】:Language and Locale settings in .NET Framework 4.0.NET Framework 4.0 中的语言和区域设置
【发布时间】:2013-05-28 03:50:46
【问题描述】:

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

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

例如,数字“THOUSAND”将显示为 1.000,00,这在运行葡萄牙语版本的 Windows 的系统中被解释为 ONE。

英语:1,000.00 = 千

葡萄牙语:1.000,00 = 千

有人可以向我指出有关如何解决此问题的任何资源,或者强制应用程序使用数据库值而不是将它们格式化为本地用户系统的正确方法是什么?用户可以接受以美国格式显示的数字。

【问题讨论】:

  • 一个代码 sn-p 显示您如何从数据库中读取数值并将它们传递给演示文稿会很有帮助。

标签: c# .net localization number-formatting


【解决方案1】:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");

这将重置文化,在表单/程序的开头使用它

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

你可以同时尝试,因为我不确定哪一个会起作用

【讨论】:

  • 第一个选择完美(en-us)选项。谢谢乔治。
【解决方案2】:

显示数字的格式(分隔符和空格)取决于它们的字符串表示。小数存储在没有分隔符的数据库或内存中(显然),它们只是硬盘上的 128 位(粗略地说)。当您尝试显示它们时,格式就会出现。如果您的号码以正确的数字格式存储在数据库中,那么这应该不是问题。

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

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

reference 1 reference 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 2016-05-12
    相关资源
    最近更新 更多