я обычно просто использовать это:валют Формат 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")));
, который работает, но я горе ndering , если это лучший подход, чтобы получить символ символа 3 символа iso перед float/double. Итак, вместо использования CultureInfo
я должен использовать RegionInfo
сейчас?
Похоже нет "легко" способ сделать это. Начиная с http://stackoverflow.com/a/22837610/1336590, вы можете захотеть иметь 'cultureInfo' в качестве входного параметра метода. Тогда у меня будет 'string currencyValue = value.ToString (" C ", cultureInfo);' для получения "правильной" строки валюты. Затем удалите символ валюты, обрезайте и добавьте 'ISOCurrencySymbol'' regionInfo'. --- Кстати. используйте 'decimal' вместо' double' для денежных значений, чтобы избежать головных болей. – Corak
Это решение тысячи разделителей, спасибо за это предложение! –
Итак, в основном: 'public static string FormatCurrency (десятичное значение, CultureInfo cultureInfo) {return string.Concat (новый RegionInfo (cultureInfo.LCID) .ISOCurrencySymbol," ", value.ToString (" C ", cultureInfo) .Replace (cultureInfo. NumberFormat.CurrencySymbol, string.Empty) .Trim()); } '--- и протестирован с помощью параметра FormatCurrency (1234.5678m, CultureInfo.GetCultureInfo ("en-CA")) 'и' FormatCurrency (1234.5678m, CultureInfo.GetCultureInfo ("de-DE")) ' – Corak