Отформатируйте десятичное число, чтобы скорректировать валюту, используя правильное количество десятичных знаков (C#)

Имея десятичную переменную 'price' и переменную RegionInfo 'region', например так:

var price = new Decimal(49.9);
var region = new RegionInfo(Thread.CurrentThread.CurrentUICulture.LCID);

Я делаю так:

string.Format("{0:0,0.##} {1}", price, region.CurrencySymbol);

Это вернет желаемую ценовую строку для двух из трех культур, которые я хочу поддержать (шведский и норвежский). Хотя для третьей культуры (датской) он ошибочно поместит символ валюты после суммы.

Это альтернативный подход:

string.Format("{0:c}", price);

Это работает для всех трех культур, но теперь моя проблема в том, что я не могу контролировать количество десятичных значений.

Мой вопрос: как мне одновременно контролировать количество десятичных значений и валютную культуру?

Я ищу что-то вроде этого (что, конечно, не работает):

string.Format("{0:c,0.##}", price);

2 ответа

Решение

Если я вас правильно понял, разве это не то, что вы хотите?

var price = new Decimal(49.9);
var cultureInfo = new CultureInfo("da-DK");
//var currentCultureInfo = new CultureInfo(CultureInfo.CurrentCulture.Name);    

var test = string.Format(cultureInfo, "{0:C2}", price);

Вы должны использовать свойство NumberFormat культуры, так как оно уже содержит информацию о том, сколько десятичных знаков должно быть включено, но вы можете переопределить его, если установите его свойство CurrencyDecimalDigits.

Пример из MSDN:

class NumberFormatInfoSample {

  public static void Main() {

  // Gets a NumberFormatInfo associated with the en-US culture.
  NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;

  // Displays a negative value with the default number of decimal digits (2).
  Int64 myInt = -1234;
  Console.WriteLine( myInt.ToString( "C", nfi ) );

  // Displays the same value with four decimal digits.
  nfi.CurrencyDecimalDigits = 4;
  Console.WriteLine( myInt.ToString( "C", nfi ) );

  }
}

/* 
This code produces the following output.

($1,234.00)
($1,234.0000)
*/
Другие вопросы по тегам