Другое

Форматирование десятичных значений до 2 знаков в C#

Узнайте, как форматировать десятичные значения до ровно 2 знаков после запятой в C#. Используйте форматные строки "F2", "0.00" или "C2" для точного отображения валюты. Быстро.

Как отформатировать значение типа decimal так, чтобы отображались ровно два знака после запятой?
При выводе decimal через метод .ToString() выводятся до 15 знаков после запятой. Мне нужно, чтобы отображалось только два знака после запятой, например, для представления валютных значений в долларах и центах. Существует ли специальная строка формата или вариант метода .ToString(), который я должен использовать для этого?

Чтобы отформатировать десятичное значение так, чтобы в выводе было ровно 2 знака после запятой, в C# можно использовать несколько строк форматирования с методом .ToString(). Наиболее распространённые варианты: decimalValue.ToString("F2") для фиксированного формата, decimalValue.ToString("0.00") для пользовательского форматирования или decimalValue.ToString("C2") для валютного форматирования с символами доллара.

Содержание

Стандартные форматные строки

Фиксированный формат (F2)

Спецификатор F2 заставляет выводить ровно 2 знака после запятой без лишних нулей.

csharp
decimal value = 123.4567m;
string formatted = value.ToString("F2"); // "123.46"

Согласно документации Microsoft, спецификатор F преобразует число в строку, представляющую фиксированное число.

Валютный формат (C2)

Спецификатор C2 форматирует число как валюту с ровно 2 знаками после запятой, включая символ валюты и разделители тысяч.

csharp
decimal value = 12345.6789m;
string formatted = value.ToString("C2"); // "$12,345.68" (в культуре US)

Как показано в документации Microsoft Learn, валютное форматирование автоматически адаптируется к символу валюты и правилам форматирования чисел текущей культуры.

Формат числа (N2)

Спецификатор N2 форматирует число с разделителями тысяч и ровно 2 знаками после запятой.

csharp
decimal value = 12345.6789m;
string formatted = value.ToString("N2"); // "12,345.68"

Пользовательские форматные строки

Формат “0.00”

Строка форматирования "0.00" гарантирует ровно 2 знака после запятой, всегда отображая два цифры после десятичной точки.

csharp
decimal value = 123.4567m;
string formatted = value.ToString("0.00"); // "123.46"
decimal value2 = 123m;
string formatted2 = value2.ToString("0.00"); // "123.00"

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

Формат “0.##”

Строка форматирования "0.##" отображает до 2 знаков после запятой, но не заставляет выводить завершающие нули.

csharp
decimal value = 123.4567m;
string formatted = value.ToString("0.##"); // "123.46"
decimal value2 = 123m;
string formatted2 = value2.ToString("0.##"); // "123"

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


Валютное форматирование

Для валютных значений, например долларов и центов, следует использовать спецификатор C2, который автоматически обрабатывает:

  • Размещение символа валюты
  • Разделители тысяч
  • Точное 2 знака после запятой
  • Правила форматирования конкретной культуры
csharp
using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        decimal amount = 12345.6789m;
        
        // Валютный формат с 2 знаками после запятой
        string currencyFormatted = amount.ToString("C2");
        Console.WriteLine(currencyFormatted); // "$12,345.68" (US culture)
        
        // Пользовательский валютный формат без разделителей тысяч
        string customCurrency = amount.ToString("$0.00");
        Console.WriteLine(customCurrency); // "$12345.68"
    }
}

Культурные особенности

При форматировании валют важно учитывать культурные различия в представлении чисел. Спецификатор C2 автоматически адаптируется к текущей культуре:

csharp
decimal amount = 12345.67m;

// Примеры разных культур
var usCulture = new CultureInfo("en-US");
var deCulture = new CultureInfo("de-DE");
var frCulture = new CultureInfo("fr-FR");

string usFormat = amount.ToString("C2", usCulture);    // "$12,345.67"
string deFormat = amount.ToString("C2", deCulture);    // "12.345,67 €"
string frFormat = amount.ToString("C2", frCulture);    // "12 345,67 €"

Согласно исследованиям, разные культуры используют разные десятичные разделители (точка против запятой) и имеют различные конвенции размещения символа валюты.


Практические примеры

Ниже приведены комплексные примеры, демонстрирующие различные подходы к форматированию:

csharp
using System;
using System.Globalization;

class DecimalFormattingExamples
{
    static void Main()
    {
        decimal[] testValues = { 123.4567m, 123m, 0.5m, -45.6789m };
        
        Console.WriteLine("Value\t\tF2\t\tC2\t\t0.00\t\t0.##");
        Console.WriteLine(new string('-', 60));
        
        foreach (var value in testValues)
        {
            Console.WriteLine($"{value}\t\t" +
                             $"{value.ToString("F2")}\t" +
                             $"{value.ToString("C2")}\t" +
                             $"{value.ToString("0.00")}\t" +
                             $"{value.ToString("0.##")}");
        }
    }
}

Вывод будет таким:

Value          F2          C2          0.00        0.##
------------------------------------------------------------
123.4567      123.46      $123.46     123.46      123.46
123           123.00      $123.00     123.00      123
0.5           0.50        $0.50       0.50        0.5
-45.6789      -45.68      -$45.68     -45.68      -45.68

Когда использовать каждый метод

Используйте ToString("F2"), когда:

  • Нужно ровно 2 знака после запятой
  • Символы валюты не требуются
  • Желательно наличие разделителей тысяч
  • Работа с фиксированными точечными вычислениями

Используйте ToString("0.00"), когда:

  • Нужно ровно 2 знака после запятой
  • Разделители тысяч не нужны
  • Работа с простым числовым выводом
  • Требуется единообразное форматирование в разных культурах

Используйте ToString("C2"), когда:

  • Выводятся валютные значения
  • Нужно автоматическое добавление символов валюты
  • Требуется правильное культурное форматирование
  • Необходимы разделители тысяч

Используйте ToString("0.##"), когда:

  • Нужно показывать десятичные знаки только при их наличии
  • Требуется гибкое форматирование десятичных значений
  • Работа с измерениями, которые могут иметь разную точность

Документация Microsoft Learn предоставляет подробные рекомендации по стандартным строкам форматирования чисел и пользовательским строкам форматирования чисел для более продвинутых сценариев форматирования.

Источники

  1. Standard numeric format strings - .NET | Microsoft Learn
  2. Custom numeric format strings - .NET | Microsoft Learn
  3. C# - How do I display a decimal value to 2 decimal places? - Stack Overflow
  4. String Format for Double [C#] - C# Examples
  5. Formatting Numbers to 2 Decimal Places in C# Using ToString

Заключение

Форматирование десятичных значений с ровно 2 знаками после запятой в C# простое с помощью метода .ToString() и подходящих строк форматирования. Для большинства валютных приложений ToString("C2") обеспечивает лучший результат, поскольку автоматически обрабатывает символы валюты, разделители тысяч и культурные правила форматирования. Если нужны более строгий контроль без символов валюты, отличными альтернативами являются ToString("F2") или ToString("0.00"). Не забывайте учитывать культурные различия при работе с международными приложениями и всегда тестируйте форматирование на крайних случаях, таких как ноль, отрицательные числа и значения, округляющиеся до целых.

Авторы
Проверено модерацией
Модерация