代码之家  ›  专栏  ›  技术社区  ›  Rohan West

是什么控制了中的CurrencyPositivePattern。网

  •  5
  • Rohan West  · 技术社区  · 6 年前

    运行时

    var x = 10.0M;
    
    Console.WriteLine(typeof(Program).Assembly.ImageRuntimeVersion);
    
    var culture = System.Globalization.CultureInfo.GetCultureInfo("da-DK");
    
    Console.WriteLine(culture.NumberFormat.CurrencyPositivePattern);
    Console.WriteLine(x.ToString("C", culture));
    

    当使用不同的框架版本时,我们看到了差异。

    v2.0.5072
    2
    kr 10,00
    

    vs公司

    v4.0.30319
    3
    10,00 kr.
    

    还有,为什么我会看到不同的 数字格式。电流正模式 在机器之间。它是特定于框架还是与操作系统相关?

    40,00 kr. vs公司 kr. 20,00

    2 回复  |  直到 6 年前
        1
  •  2
  •   Dmitry    6 年前

    还有为什么我会看到不同的数字格式。机器之间的电流正模式。它是特定于框架还是与操作系统相关?

    您使用的覆盖(GetCultureInfo)不应受到用户首选项的影响。根据 MSDN ,特定于区域性的值本质上是不稳定的。我认为您看到的更多的是操作系统,可能会在Windows更新之间发生变化。如果您需要一些稳定的东西,例如在单元测试中,不变量或自定义区域性是最好的选择。

    NumberFormatInfo和动态数据

    NumberFormatInfo类提供的用于格式化数值的区域性特定数据是动态的,就像CultureInfo类提供的区域性数据一样。您不应该对与特定CultureInfo对象关联的NumberFormatInfo对象的值的稳定性做出任何假设。只有不变区域性及其关联的NumberFormatInfo对象提供的数据是稳定的。其他数据可以在应用程序会话之间更改,甚至在单个会话内更改,原因如下:

    • 系统更新 .文化偏好(如货币符号或货币格式)随时间而变化。发生这种情况时,Windows Update会包括对特定区域性的NumberFormatInfo属性值的更改。

    • 替换培养基 。CultureAndRegionInfoBuilder类可用于替换现有区域性的数据。

    • 对属性值的级联更改 。许多与区域性相关的属性可以在运行时更改,这反过来会导致NumberFormatInfo数据更改。例如,可以通过编程或通过用户操作更改当前区域性。发生这种情况时,CurrentInfo属性返回的NumberFormatInfo对象将更改为与当前区域性关联的对象。

    • 用户首选项 。应用程序的用户可以通过“控制面板”中的“区域和语言”选项覆盖与当前系统区域性关联的某些值。例如,用户可以选择不同的货币符号或不同的十进制分隔符符号。如果文化信息。UseUserOverride属性设置为true(其默认值),NumberFormatInfo对象的属性也会从用户设置中检索。

        2
  •  0
  •   Dan Wilson    6 年前

    检查控制面板(>);时钟、语言和地区>更改日期、时间或数字格式>其他设置

    enter image description here