Символ
"#" в форматированной строке не отображает "незначащие" нули.
В вашем случае, вероятно, подойдет спецификатор
"0".
Подробнее о форматировании чисел можно прочесть, например, в специальном разделе документации:
Строки настраиваемых числовых форматов
Позволю себе оставить пару комментариев-советов по поводу кода. Хотел оформить в виде комментария, но в виду объема и того что по каким-то причинам не подсвечивался синтаксис переношу сюда:
1. Как вы должно быть заметили некоторая функциональность при считывании информации с консоли дублируется. Вместо того чтобы заниматься копированием однотипного участка внося минимальные изменения такие части удобнее выносить в отдельные функции.
Например:
public static double ReadDouble
(string msg = "", string errMsg = "Произошла ошибка, повторите ввод")
{
if (!string.IsNullOrWhiteSpace(msg))
Console.WriteLine(msg);
double value;
while (!double.TryParse(Console.ReadLine(), out value))
Console.WriteLine(errMsg);
return value;
}
Тогда считывание будет намного понятнее:
var s = ReadDouble("Введи сечение кабеля, мм2: ");
var l = ReadDouble("Введи длину кабеля, мм2: ");
var i = ReadDouble("Введи нагрузку на конце линии, А: ");
var u = ReadDouble("Введи значение напряжения источника, В: ");
2. По возможности следует избегать использования "магических чисел" (как у вас -
0.018). Константы должны быть определены как константы. Вместо определения Pi как
3.1415926535 используете встроенное
Math.PI.
3. Использование полей в классе можно улучшить. Сейчас они у вас открытые и задаются извне. Если какие параметры являются обязательными, то определив соответствующий конструктор, можно не только добавить сделать класс более надежным, но и в дальнейшем сделать проверку на правильность передаваемых значений.
public double S { get; set; }
public double L { get; set; }
public double I { get; set; }
public double U { get; set; }
public Technocalc(double s, double l, double i, double u)
{
S = s;
L = l;
I = i;
U = u;
}
4. Методы можно упростить с более современным синтаксисом:
public double padU => R * I;
public double R => RConst / S * L * 2;
public double diameter => Math.PI * S * S / 4;
Итого, с учетом написанного выше класс будет выглядеть вот так:
class Technocalc
{
public const double RConst = 0.018;
public double S { get; set; }
public double L { get; set; }
public double I { get; set; }
public double U { get; set; }
public Technocalc(double s, double l, double i, double u)
{
S = s;
L = l;
I = i;
U = u;
}
public double padU => R * I;
public double R => RConst / S * L * 2;
public double diameter => Math.PI * S * S / 4;
}
и вызывающий код:
public static double ReadDouble
(string msg = "", string errMsg = "Произошла ошибка, повторите ввод")
{
if (!string.IsNullOrWhiteSpace(msg))
Console.WriteLine(msg);
double value;
while (!double.TryParse(Console.ReadLine(), out value))
Console.WriteLine(errMsg);
return value;
}
public static void Main(string[] args)
{
Console.WriteLine("\t\t\t\t" + "Программа расчета падения напряжения в кабеле. 2019 г. Версия 0.0.1");
var s = ReadDouble("Введи сечение кабеля, мм2: ");
var l = ReadDouble("Введи длину кабеля, мм2: ");
var i = ReadDouble("Введи нагрузку на конце линии, А: ");
var u = ReadDouble("Введи значение напряжения источника, В: ");
Technocalc cable = new Technocalc(s, l, i, u);
//вывод всей информации на экран
Console.WriteLine();
Console.WriteLine("\t\t\t\t" + "Параметры линии:");
Console.WriteLine("--------------------------------------------------------------------------------");
Console.WriteLine("Кол-во жил\t\tRкабеля, Ом\t\tСечение, мм2\t\tНапряжение,В\tВых. напряжение, В");
Console.WriteLine("{0:#0.##}\t\t\t{1:0.0#}\t\t\t{2:0.##}\t\t\t{3:0.##}\t\t{4:0.##}", 2, cable.R, cable.S, cable.U, cable.U - cable.padU);
Console.WriteLine("--------------------------------------------------------------------------------");
Console.WriteLine("Rжилы , Ом\t\tДлина кабеля,м\t\tНагрузка, А\t\tПадение U, В\tДиаметр жилы, мм");
Console.WriteLine("{0:#0.##}\t\t\t{1:#0.##}\t\t\t{2:#0.##}\t\t\t{3:#0.##}\t\t{4:#0.##}\t\t", cable.R / 2, cable.L, cable.I, cable.padU, cable.diameter);
Console.WriteLine();
Console.ReadKey(true);
}