← Все вопросы

Как форматировать число при выводе через ToString в C#?

Задан 27 месяцев назад298 просмотров2 ответа
5

Хочу вывести число денег с двумя знаками после запятой и дату в нужном формате. Знаю, что есть ToString(), но если вызвать его просто так — получаю как есть. Как передать формат? Например, чтобы 1234.5 стало 1 234,50.

2 ответа

11
✓ Принятый ответ — помог автору

ToString() принимает строку формата. Для чисел есть стандартные спецификаторы:

double money = 1234.5;

money.ToString("F2");   // "1234,50" — фиксированное, 2 знака
money.ToString("N2");   // "1 234,50" — с разделителем разрядов
money.ToString("C");    // "1 234,50 ₽" — валюта (зависит от культуры)
(0.25).ToString("P0");  // "25 %" — проценты
255.ToString("X");      // "FF" — шестнадцатеричное

Для дат:

var now = DateTime.Now;
now.ToString("dd.MM.yyyy");        // "18.06.2026"
now.ToString("yyyy-MM-dd HH:mm");  // "2026-06-18 14:30"

Часто удобнее интерполяция строк — формат пишется после двоеточия:

Console.WriteLine($"Цена: {money:N2}");
Console.WriteLine($"Дата: {now:dd.MM.yyyy}");

Важный момент: разделитель (запятая или точка) и символ валюты зависят от культуры системы. Если нужен предсказуемый результат, задавайте культуру явно:

using System.Globalization;
money.ToString("N2", CultureInfo.InvariantCulture); // "1,234.50"
money.ToString("N2", new CultureInfo("ru-RU"));     // "1 234,50"
3

Если переопределяете ToString() в своём классе — это для другого: чтобы объект красиво печатался. По умолчанию он выводит имя типа, что бесполезно:

class Point
{
    public int X, Y;
    public override string ToString() => $"({X}, {Y})";
}

var p = new Point { X = 1, Y = 2 };
Console.WriteLine(p); // "(1, 2)" вместо "Namespace.Point"

Но если вопрос про форматирование чисел/дат — смотрите принятый ответ, там спецификаторы формата.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект