Если вы хотите принять во внимание культуру, вам нужно использовать информацию, предоставленную NumberFormatInfo
.Ниже приведен метод расширения для форматирования десятичной дроби как валюты, но без начального нуля.Вы можете легко изменить метод расширения на обычный метод, если не хотите использовать метод расширения.
В коде есть один «ярлык».Он не может обрабатывать группы разных размеров.Я не думаю, что это можно сделать с помощью пользовательского числового формата, и тогда единственное работоспособное решение - это отформатировать с использованием N
и удалить все ведущие 0
.
static class DecimalExtensions {
public static String ToCurrencyFormat(this Decimal value) {
return ToCurrencyFormat(value, CultureInfo.CurrentCulture);
}
public static String ToCurrencyFormat(this Decimal value, CultureInfo cultureInfo) {
return ToCurrencyFormat(value, cultureInfo.NumberFormat);
}
public static String ToCurrencyFormat(this Decimal value,
NumberFormatInfo numberFormat) {
// Assume the CurrencyGroupSizes contains a single element.
var format =
"#,"
+ new String('#', numberFormat.CurrencyGroupSizes[0])
+ "."
+ new String('0', numberFormat.CurrencyDecimalDigits);
var formattedValue = Math.Abs(value).ToString(format, numberFormat);
if (value >= Decimal.Zero)
return FormatPositiveCurrency(
numberFormat.CurrencyPositivePattern,
numberFormat.CurrencySymbol,
formattedValue
);
else
return FormatNegativeCurrency(
numberFormat.CurrencyNegativePattern,
numberFormat.CurrencySymbol,
formattedValue
);
}
static String FormatPositiveCurrency(Int32 pattern, String symbol, String value) {
switch (pattern) {
case 0:
return symbol + value;
case 1:
return value + symbol;
case 2:
return symbol + " " + value;
case 3:
return value + " " + symbol;
default:
throw new ArgumentException();
}
}
static String FormatNegativeCurrency(Int32 pattern, String symbol, String value) {
switch (pattern) {
case 0:
return "(" + symbol + value + ")";
case 1:
return "-" + symbol + value;
case 2:
return symbol + "-" + value;
case 3:
return symbol + value + "-";
case 4:
return "(" + value + symbol + ")";
case 5:
return "-" + value + symbol;
case 6:
return value + "-" + symbol;
case 7:
return value + symbol + "-";
case 8:
return "-" + value + " " + symbol;
case 9:
return "-" + symbol + " " + value;
case 10:
return value + " " + symbol + "-";
case 11:
return symbol + " " + value + "-";
case 12:
return symbol + " -" + value;
case 13:
return value + "- " + symbol;
case 14:
return "(" + symbol + " " + value + ")";
case 15:
return "(" + value + " " + symbol + ")";
default:
throw new ArgumentException();
}
}
}