Как форматировать число при выводе через ToString в C#?
Хочу вывести число денег с двумя знаками после запятой и дату в нужном формате. Знаю, что есть ToString(), но если вызвать его просто так — получаю как есть. Как передать формат? Например, чтобы 1234.5 стало 1 234,50.
2 ответа
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"
Если переопределяете 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"
Но если вопрос про форматирование чисел/дат — смотрите принятый ответ, там спецификаторы формата.