Что такое c# эквивалент Java DecimalFormat?

Как преобразовать следующий код в C#

DecimalFormat form 
String pattern = "";
for (int i = 0; i < nPlaces - nDec - 2; i++) {
        pattern += "#";
}
pattern += "0.";
for (int i = nPlaces - nDec; i < nPlaces; i++) {
        pattern += "0";
}
form = (DecimalFormat) NumberFormat.getInstance();
DecimalFormatSymbols symbols = form.getDecimalFormatSymbols();
symbols.setDecimalSeparator('.');
form.setDecimalFormatSymbols(symbols);
form.setMaximumIntegerDigits(nPlaces - nDec - 1);
form.applyPattern(pattern);

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

2 ответов


для десятичного разделителя вы можете установить его в NumberFormatInfo экземпляр и использовать его с ToString:

    NumberFormatInfo nfi = new NumberFormatInfo();
    nfi.NumberDecimalSeparator = ".";

    //** test **
    NumberFormatInfo nfi = new NumberFormatInfo();
    decimal d = 125501.0235648m;
    nfi.NumberDecimalSeparator = "?";
    s = d.ToString(nfi); //--> 125501?0235648

чтобы получить результат вашей версии java, используйте ToString() версия функции с Пользовательские Строки Числового Формата (т. е.: то, что вы назвали модель):

s = d.ToString("# ### ##0.0000", nfi);// 1245124587.23     --> 1245 124 587?2300
                                      //      24587.235215 -->       24 587?2352


В C#число десятичных хранящиеся в decimal type, с внутренним представлением, которое позволяет выполнять десятичную математику без ошибок округления.

если у вас есть номер, вы можете