decimal cash = 3124.728m;
//Code '392' is JAPANESE YEN, with basic French formatting.
var frenchmen = new MoneyFormatInfo("392", new CultureInfo("fr-FR"));
result = cash.ToString("m", frenchmen);
Assert.AreEqual(result, "3 124,73 JPY");
Сообщение об ошибке, которое я получаю: «FormatException не было обработано кодом пользователя».
Я отразил метод BCL ToString
. Я вижу, что он обращается только к списку строк стандартного формата; Я не вижу ни одной зацепки, которая позволила бы мне решить эту проблему. Я что-то упускаю?
Вот другие примеры, которые в настоящее время работают, как ожидалось...
//Code '978' is the Euro
//The custom "Money" class holds an amount and currency type which
//intentionally cannot be overridden.
Money dough = new Money(8124.348m, "978");
decimal cash = 3124.728m;
string result;
//EURO currency parameters, with basic French formatting
var french = new CultureInfo("fr-FR");
result = String.Format(french, "the money: {0:m}", dough);
Assert.AreEqual(result, "the money: 8 124,35 EUR");
//JAPANESE YEN, with basic French formatting.
var frenchmen = new MoneyFormatInfo("392", new CultureInfo("fr-FR"));
result = String.Format(frenchmen, "the cash: {0:m}", cash);
Assert.AreEqual(result, "the cash: 3 124,73 JPY");
result = dough.ToString("c", frenchmen);
Assert.AreEqual(result, "8 124,35 €");
Мой пользовательский класс Money
имеет переопределение ToString(), которое выполняет изменения состояния, а также преобразует строку формата «M» в «C». Короче говоря, это работает, потому что я контролирую метод ToString(). В десятичном типе BCL у меня нет контроля над методом ToString(). Я также не хочу делать собственный десятичный тип.
string.Format("{0:m}", cash)
? - person BlueMonkMN   schedule 12.01.2015NumberFormatInfo
в своей реализацииIFormatProvider.GetFormat()
? Это то, что используетdecimal.ToString()
- person Jcl   schedule 12.01.2015decimal.ToString()
вmscorlib
гласит:return Number.FormatDecimal(this, format, NumberFormatInfo.GetInstance(provider));
, так что я сомневаюсь, что это так. Редактировать: увидел ваше последнее редактирование, неважно. - person Jcl   schedule 12.01.2015