尝试调整控制台的输出内容

Nep*_*n14 0 c# console alignment

我有一个 DisplayResults 方法,当调用它时,它将其内容输出到控制台。我很难让它很好地对齐。我使用制表符 \t 来对齐它,但它看起来会更好。这是代码:

        public static void DisplayResults(string empName, decimal empWeeklySales, decimal COMMISSION_RATE, decimal grossPay, 
                                      decimal INCOME_TAX_RATE, decimal incomeTaxPayable, decimal PRSI_RATE, decimal prsiPayable,
                                      decimal RETIREMENT_CONTRIBUTION_RATE, decimal retirementContribution, 
                                      decimal totalDeductions, decimal takeHomePay)
    {
        Console.WriteLine("\n*************** WEEKLY PAYROLL APP ***************\n");

        Console.WriteLine("Employee Name: \t\t\t\t{0}\n", empName);
        Console.WriteLine("This week's sales: \t\t\t{0:n}", empWeeklySales);
        Console.WriteLine("Commission Rate: \t{0:F2}%\n", COMMISSION_RATE);

        Console.WriteLine("Gross Pay: \t\t\t\t{0:F2}", grossPay);
        Console.WriteLine("Income Tax: \t\t({0:F2}%) \t{1:F2}", INCOME_TAX_RATE, incomeTaxPayable);
        Console.WriteLine("PRSI: \t\t\t({0:F2}%) \t{1:F2}", PRSI_RATE, prsiPayable);
        Console.WriteLine("Retirement Contribution: ({0:F2}%) \t{1:F2}", RETIREMENT_CONTRIBUTION_RATE, retirementContribution);

        Console.WriteLine("Total Deductions: \t\t\t{0:F2}\n", totalDeductions);

        Console.WriteLine("Take Home Pay: \t\t\t\t{0:F2}\n", takeHomePay);

        Console.WriteLine("\n**************************************************");
    }
Run Code Online (Sandbox Code Playgroud)

当我输出它时,它看起来像这样: 控制台窗口中显示的内容

正如您所看到的,它排列得不太好。我希望中间的百分比值和右边的货币值都右对齐。因此,理想情况下,文本全部左对齐,中间区域的百分比值右对齐,货币值的外部区域右对齐。我希望这是有道理的。谁能告诉我如何最好地实现这一目标?谢谢。

Ste*_*eve 6

您可以使用带有对齐方式的字符串格式来创建字符列。当您的输出控制台使用固定宽度字体时,这是可行的。

例如你的第一行可以写成

Console.WriteLine("{0,-40}{1,-50}", "Employee Name:", empName);
Run Code Online (Sandbox Code Playgroud)

这将写“员工姓名;” 在左侧对齐的 40 个字符的列中,并用空格填充其余部分以达到 40 个字符的宽度。empname然后,宽度为 50 个字符的新列将接收列左侧对齐的值

所得税率的线可以写成

Console.WriteLine("{0,-30}{1,10:F2}%{2,50:F2}", 
              "Income Tax:", INCOME_TAX_RATE, incomeTaxPayable);
Run Code Online (Sandbox Code Playgroud)

这会将标签的第一列减少到仅 30 个字符,并添加一个包含 10 个字符的列,该列将填充右侧对齐的 INCOME_TAX_RATE 值。当然,这可以对其他线路重复

MSDN 文章“复合格式”对此进行了很好的解释