numberformatinfo中的多个货币符号

时间:2018-11-28 04:46:13

标签: c# localization number-formatting cultureinfo

在编写一段代码时,我遇到了使用Numberformatinfo的地方,我必须同时为一个国家写两个货币符号。

台湾现在将TWD一起用作货币符号。因此,他们将其货币记为NTD 23,900 起

但是,仅通过使用NumberformatInfo,我无法同时放置两个货币符号。

    public NumberFormatInfo GetCurrencyFormat(string countryCode, string languageCode)
    {var cultureInfo = GetCultureInfo(countryCode, languageCode);

        var currencyFormat = GetCurrencyFormat(cultureInfo);
        return currencyFormat;
    }

在这里我可以更改符号,但只能更改为上述符号之一,可以将其放置在金额之前或之后。

1 个答案:

答案 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))