Модуль: C#. ПЕРЕМЕННЫЕ. ФОРМАТЫ ВЫВОДА


Задача

5/5

Точность вывода

Теория Нажмите, чтобы прочитать/скрыть

Спецификаторы вывода
Для вывода вещественных значений достаточно вызвать метод Console.Write или Console.WriteLine:
 
double a = 0.9999;
Console.Write(a);
 
Но иногда требуется предварительно отформатировать вывод значений, это удобно сделать с помощью метода String.Format, подробнее здесь.
Вывод с определенной точностью
Для форматирования дробных чисел используется спецификатор f, число после которого указывает, сколько знаков будет после разделителя.
double a = 12.123;
Console.WriteLine(String.Format("{0:f2}", a));
В результате будет выведено 12,12, но если использовать значение 0.9999, то произойдет неконтролируемое округление и будет выведено  1,00.

Поэтому для отбрасывания знаков, а не округления используется следующий алгоритм:
1) умножаем исходное значение на 10, столько раз сколько знаков после запятой нужно оставить;
2) с помощью метода  Math.Truncate оставляем только целую часть;
3) делим получившиеся значение на 10, столько раз сколько знаков после запятой нужно оставить.

Пример для вывода с точностью два знака: 
double a = 0.9999;
a = a * Math.Pow(10, 2);
a = Math.Truncate(a);
a = a / Math.Pow(10, 2);
 
Тип разделителя при выводе результата (точка или запятая) зависит от региональных настроек компьютера, поэтому чтобы всегда использовать в качестве разделителя точку надо изменить региональные параметры на инвариантные, итоговый пример:
 
CultureInfo ci = new CultureInfo("");
double a = 0.9999;
a = a * Math.Pow(10, 2);
a = Math.Truncate(a);
a = a / Math.Pow(10, 2);
Console.WriteLine(a.ToString(ci));

Задача

Напишите программу, которая выполняет вывод значения переменной с точностью 2 знака.