Спецификаторы вывода
Для вывода вещественных значений достаточно вызвать метод
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));