Несколько символов валюты в numberformatinfo - PullRequest
0 голосов
/ 28 ноября 2018

При написании фрагмента кода я сталкивался с тем, что, используя 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 голосов
/ 28 ноября 2018

Боюсь, есть только один способ, как это сделать.Вам необходимо реализовать пользовательский тип с помощью специального средства форматирования.

Похоже, что не поддерживаются два символа / ярлыка валюты и / или один из четырех предопределенных форматов (см .: замечания в документации )

Примером может быть простая версия.

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)).

...