While writing a piece of code, I came across where using Numberformatinfo
, I had to write two currency symbols for a country at the same time.
Taiwan, now uses TWD
as their currency symbol along with 起
. So they write their Currency as NTD 23,900 起
.
But just by using NumberformatInfo, I am not able to put two currency symbols at the same time.
public NumberFormatInfo GetCurrencyFormat(string countryCode, string languageCode)
{var cultureInfo = GetCultureInfo(countryCode, languageCode);
var currencyFormat = GetCurrencyFormat(cultureInfo);
return currencyFormat;
}
Here I can change the symbol, but to only one of the above mentioned, which can be placed either before the amount or after.
I'm afraid, there is only one way, how to do this. You need to implement a custom type with a custom formatter.
There seems not be a support for two currency symbols/shortcuts and or one of four predefined formats (see: remarks in documentation)
Simple version can be like this.
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)));
}
}
}
The example is constructed for EURO currency (my locale). In your real implementation you need to determine, whether the format should be changed, e.g. if if ((format == "C") && IsTaiwan(formatProvider))
.