【问题标题】:Differences in displaying currency显示货币的差异
【发布时间】:2016-12-18 04:12:24
【问题描述】:

在尝试使用货币值格式化字符串时,我注意到 WPF 显示它的方式有所不同。

XAML 中格式化decimal 值时,WPF 将其显示为5,99 €

<TextBlock Text="{Binding Total, StringFormat={}{0:C}}"/>
return 5.99m;

当我在后面的代码中格式化时,它显示为€ 5,99

<TextBlock Text="{Binding TotalString}"/>
return string.Format("{0:C}", 5.99m);

这是一个错误吗?

我安装的是 Windows 10,目标 .NET 版本是 4.5.2。

【问题讨论】:

  • 哪个国家?在我的德语 Windows 10 上,string.Format 返回“5,99 €”
  • @Clemens 比利时。我在 windows 中的设置也是正确的,所以不会是我认为的问题。

标签: c# wpf


【解决方案1】:

在设置 Binding 的 StringFormat 时,WPF 不使用 CultureInfo.CurrentCulture,而是默认使用 en-US,或者您通过设置元素(或其父元素)的 Language 属性指定的值。详情请见this question

另一方面,string.Format 确实使用了CultureInfo.CurrentCulture。用户可以配置它在格式化货币方面的确切行为。

例如货币模式由注册表值HKEY_CURRENT_USER\Control Panel\International\iCurrency 控制,可以在控制面板中设置(抱歉是德语):

因此,您可能只需更改该设置即可实现从 StringFormat 获得的格式化行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多