Как вывести число с двумя знаками после запятой
В интерполяции формат пишется после двоеточия, в ToString — в скобках:
double x = 3.14159;
Console.WriteLine($"{x:F2}");
Console.WriteLine(x.ToString("F2"));F2 — ровно два знака после запятой, F0 — без дробной части, F3 — три знака. Число при этом округляется только на экране, сама переменная не меняется. С русскими региональными настройками программа напечатает 3,14, с английскими — 3.14.
Точка или запятая
Разделитель берётся из настроек компьютера. Чтобы он был одним и тем же везде, настройки передают явно:
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.142CultureInfo.InvariantCulture — «нейтральные» настройки с точкой. Нужно, чтобы вся программа выводила числа с точкой, — одна строка в начале: CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;. Так делают, например, в задачах, которые проверяет робот: он обычно ждёт точку.
Частые форматы
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 знака после запятой |
N2 | 2 знака и разделители тысяч |
0.00 | свой шаблон: ровно 2 знака |
0.## | до 2 знаков, лишние нули не пишутся |
D5 | целое не короче 5 цифр, слева нули |
{n,6} | ширина поля 6, выравнивание вправо ({n,-6} — влево) |
В русских настройках N2 разделяет тысячи пробелом, а дробную часть — запятой.
Подводные камни
- Формат меняет только вывод. Если округлённое значение нужно для расчётов, округлите само число — справка Как округлить число.
Console.WriteLine(x)без формата печатает столько знаков, сколько нужно, чтобы точно передать число:0.1 + 0.2выводится как0,30000000000000004. Для людей выводите через формат.Dработает только с целыми; для дробных —Fили шаблон0.00.- Строки с числами, сделанные для файлов и обмена между программами, лучше всегда писать с
InvariantCulture: иначе файл, записанный на русской Windows, не прочитается на английской.