在编写一段代码时,我遇到了使用Numberformatinfo
的地方,我必须同时为一个国家写两个货币符号。
台湾现在将TWD
与起
一起用作货币符号。因此,他们将其货币记为NTD 23,900 起
。
但是,仅通过使用NumberformatInfo,我无法同时放置两个货币符号。
public NumberFormatInfo GetCurrencyFormat(string countryCode, string languageCode)
{var cultureInfo = GetCultureInfo(countryCode, languageCode);
var currencyFormat = GetCurrencyFormat(cultureInfo);
return currencyFormat;
}
在这里我可以更改符号,但只能更改为上述符号之一,可以将其放置在金额之前或之后。
答案 0 :(得分:1)
恐怕只有一种方法可以做到这一点。您需要使用自定义格式化程序实现自定义类型。
似乎不支持两种货币符号/快捷方式或四种预定义格式之一(请参阅:remarks in documentation)
简单的版本可以是这样的。
using System;
using System.Globalization;
namespace TwoCurrencySymbols
{
internal sealed class Currency : IFormattable
{
private readonly IFormattable value;
public Currency(IFormattable myValue)
{
value = myValue;
}
public string ToString(string format, IFormatProvider formatProvider)
{
if (format == "C")
{
return ("EUR " + value.ToString(format, formatProvider));
}
return value.ToString(format, formatProvider);
}
}
internal static class Program
{
private static void Main()
{
Console.WriteLine(string.Format(CultureInfo.CurrentCulture, "{0:C}", new Currency(1)));
}
}
}
该示例是为欧元货币(我的所在地)构建的。在实际的实现中,您需要确定是否应更改格式,例如如果是if ((format == "C") && IsTaiwan(formatProvider))
。