Форматировать десятичную дробь с помощью toString() с использованием новейших фреймворков. 4.7.2 или ядро 2.2

#c# #.net #.net-core

#c# #.net #.net-ядро

Вопрос:

Есть вопросы, подобные моим, но я чувствую, что они устарели.

 decimal decimalVar = 18000;
String formated = decimalVar.ToString("{0:N}");
print(formated);
  

Я хочу этот результат:

 18000.00
  

но мой результат таков:

 {18000:n}
  

Как я могу это сделать?

Комментарии:

1. ToString("F2")

2. Или print($"{decimalVar:F2}"); , если вы хотите, чтобы это было частью строки большего размера.

3. Похоже, что вы объединяете ToString форматирование со строкой, myNum.ToString("N") что примерно равносильно string.Format("{0:N}", myNum)

4. В Visual Studio вы можете поместить курсор куда-нибудь в ToString текст и нажать F1 , чтобы открыть документацию для decimal.ToString

Ответ №1:

Вы могли бы использовать либо

 string formated = decimalVar.ToString("N2");
  

использовать ToString() или

 string formated = $"{decimalVar:N}";
  

использовать интерполяцию строк.

Оба имеют одинаковый результат.

То, что вы пытались в своем вопросе, наводит на мысль, что вы, возможно, перепутали два из этих двух.

Комментарии:

1. Кстати, здесь важна не столько версия framework, сколько версия C #. Интерполяция строк не будет работать с более ранней версией, чем C # 6.

Ответ №2:

просто используйте ToString("###.00") вот так

     decimal num = 18000;
    Console.WriteLine(num.ToString("##.00"));   
  

Результат 18000.00

предположим, что десятичное значение, подобное decimal num = 18000.22m; результату, будет 18000.22

Ответ №3:

То, что вы ищете, это decimalVar.ToString("N2") .

Для получения дополнительной информации документация находится по адресу: https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings

Дополнительные примеры:

 double dblValue = -12445.6789;
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture));
// Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1", 
                  CultureInfo.CreateSpecificCulture("sv-SE")));
// Displays -12 445,7

int intValue = 123456789;
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture));
// Displays 123,456,789.0 
  

РЕДАКТИРОВАТЬ: формат «N» добавляет разделители, а в вашем сообщении ваш «ожидаемый результат» отсутствует, поэтому вы можете захотеть использовать «F» вместо этого. decimalVar.ToString("F2")