Глиф Учебники

Как вывести число с двумя знаками после запятой

Справочник · C# · 1 минута чтения

В интерполяции формат пишется после двоеточия, в ToString — в скобках:

C#
double x = 3.14159;
Console.WriteLine($"{x:F2}");
Console.WriteLine(x.ToString("F2"));

F2 — ровно два знака после запятой, F0 — без дробной части, F3 — три знака. Число при этом округляется только на экране, сама переменная не меняется. С русскими региональными настройками программа напечатает 3,14, с английскими — 3.14.

Точка или запятая

Разделитель берётся из настроек компьютера. Чтобы он был одним и тем же везде, настройки передают явно:

C#
using System.Globalization;

double x = 3.14159;
CultureInfo inv = CultureInfo.InvariantCulture;
CultureInfo ru = new CultureInfo("ru-RU");

Console.WriteLine(x.ToString("F2", inv));
Console.WriteLine(x.ToString("F2", ru));
Console.WriteLine(string.Format(inv, "{0:F1} и {1:F3}", x, x));
Вывод
3.14
3,14
3.1 и 3.142

CultureInfo.InvariantCulture — «нейтральные» настройки с точкой. Нужно, чтобы вся программа выводила числа с точкой, — одна строка в начале: CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;. Так делают, например, в задачах, которые проверяет робот: он обычно ждёт точку.

Частые форматы

C#
using System.Globalization;

CultureInfo inv = CultureInfo.InvariantCulture;
double price = 1234567.891;
double half = 2.5;
double pi = 3.14159;
int n = 42;

Console.WriteLine(price.ToString("N2", inv));
Console.WriteLine(half.ToString("0.00", inv));
Console.WriteLine(pi.ToString("0.##", inv));
Console.WriteLine(half.ToString("0.##", inv));
Console.WriteLine(n.ToString("D5"));
Console.WriteLine($"[{n,6}]");
Вывод
1,234,567.89
2.50
3.14
2.5
00042
[    42]
ФорматЧто делает
F2ровно 2 знака после запятой
N22 знака и разделители тысяч
0.00свой шаблон: ровно 2 знака
0.##до 2 знаков, лишние нули не пишутся
D5целое не короче 5 цифр, слева нули
{n,6}ширина поля 6, выравнивание вправо ({n,-6} — влево)

В русских настройках N2 разделяет тысячи пробелом, а дробную часть — запятой.

Подводные камни