2

我需要以以下格式显示所有货币:

"[Code] [Symbol]#,##0.00;[Code] [Symbol](#,##0.00)"

用户将选择一个国家,我从外部服务获得货币代码和符号。然后我使用 string.replace 将货币代码和符号设置为上面的格式字符串。

因此,值 123.456(美元)的格式如下:

"USD $123.46"

这种方法适用于大多数货币符号,但我对 Kuwait د.ك的货币符号有疑问。我似乎无法格式化任何值以允许符号出现在数字之前。我对字母没有同样的问题。我认为这与阿拉伯语是从右到左书写的事实有关。该符号甚至在浏览器中也是如此。我不能从左到右选择它,选择从右边开始。另外,当我在 linqpad 中进行测试时,我的字符串显示为[Kuwait_Symbol]#,##0.00,但是粘贴到 stackoverflow 文本框中导致字符串为د.ك#,##0.00

请注意,字符串中字符的顺序已更改。

虽然,我有一种感觉,我不得不建议使用符号是不可行的,有没有办法解决这个问题?另外,为什么不能在数字前显示符号?

4

1 回答 1

0

问题源于浏览器以及它们如何处理从右到左语言中的字符,而不是生成它们的代码。如果你试试

var kuwaitCulture = new System.Globalization.CultureInfo("ar-KW");
Response.Write(Server.UrlEncode(amount.ToString("c", kuwaitCulture)));

您会看到返回的内容在金额之前清楚地具有 CurrencySymbol。

为了解决这个问题,您可以使用相应的 Unicode 字符在浏览器中强制从左到右呈现。例如,

Response.Write('\u202A' + kuwaitCulture.NumberFormat.CurrencySymbol + '\u202C' + amount);

根据您的规范正确呈现。

于 2011-06-26T07:45:35.100 回答