在以前的 .Net 生活中,我为当前语言格式化货币(任何货币)的方式是执行以下操作:
public string FormatCurrencyValue(string symbol, decimal val)
{
var format = (NumberFormatInfo)CultureInfo.CurrentUICulture.NumberFormat.Clone();
//overwrite the currency symbol with the one I want to display
format.CurrencySymbol = symbol;
//pass the format to ToString();
return val.ToString("{0:C2}", format);
}
这将返回货币值,没有任何小数部分,为给定的货币符号格式化,为当前的文化调整 - 例如£50.00
for en-GB
but 50,00£
for fr-FR
。
在 Windows Store 下运行的相同代码会生成{50:C}
.
查看(相当糟糕的)WinRT 文档,我们确实有CurrencyFormatter类 - 但它只是在尝试使用"£"
作为参数触发构造函数并获得ArgumentException
(WinRT 文档非常特殊 - 它几乎没有关于异常的信息)之后我意识到它需要一个 ISO 货币符号(公平地说,参数名称是currencyCode
,但即便如此)。
现在 - 我也可以得到其中的一个,但是CurrencyFormatter
还有另一个问题使它不适合货币格式化 - 你只能 formatdouble
和types long
-ulong
没有decimal
重载 - 在某些情况下会导致一些有趣的值错误。
那么如何在 WinRT.net 中动态格式化货币呢?