Формат валюты C# ISOCurrencySymbol
Я обычно просто использовал бы это:
double test = 1234.5678;
Console.WriteLine(test.ToString("C"));
который прекрасно работает У меня была перезапись канадских долларов, чтобы люди увидели разницу между долларами США и Канады:
var canadaFi = (NumberFormatInfo)CultureInfo.GetCultureInfo("en-CA").NumberFormat.Clone();
canadaFi.CurrencySymbol = "C$ ";
Console.WriteLine(val.ToString("C", canadaFi));
Но теперь люди просят вывод, как:
CAD 1234,56
Поэтому я использовал:
RegionInfo ca = new RegionInfo("en-CA");
Console.WriteLine(string.Format("{0} {1}", ca.ISOCurrencySymbol, test.ToString("f2")));
это работает, но мне интересно, если это лучший подход, чтобы получить символ валюты 3 char iso перед float/double. Таким образом, вместо использования CultureInfo
Я должен использовать RegionInfo
сейчас?
2 ответа
Правильный путь будет:
const string canada = "en-CA";
var ca = new RegionInfo(canada);
var cai = new CultureInfo(canada)
{
NumberFormat =
{
CurrencySymbol = ca.ISOCurrencySymbol,
CurrencyPositivePattern = 2,
CurrencyNegativePattern = 12
}
};
Console.WriteLine(test.ToString("C", cai));
Если вы установите CurrencyPositivePattern = 2
убедитесь, что символ помещен перед числом с дополнительным пустым пробелом (см. также документацию для CurrencyPositivePattern), CurrencyNegativePattern = 12
делает то же самое для отрицательных значений ( документация для CurrencyNegativePattern).
выход:
CAD 1 234,57
и для негатива
CAD -1 234,57
Как объясняет @Corak:
CultureInfo cai = new CultureInfo("en-CA");
RegionInfo ca = new RegionInfo("en-CA");
Console.WriteLine(ca.ISOCurrencySymbol + " " + test.ToString("C", cai).Substring(1));
выход:
CAD 1 234,57
Добавлено предложение @Coraks:
Console.WriteLine(ca.ISOCurrencySymbol + " " + test.ToString("C", cai).Replace(cai.CurrencySymbol, ""));