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)
正如您所看到的,它排列得不太好。我希望中间的百分比值和右边的货币值都右对齐。因此,理想情况下,文本全部左对齐,中间区域的百分比值右对齐,货币值的外部区域右对齐。我希望这是有道理的。谁能告诉我如何最好地实现这一目标?谢谢。
您可以使用带有对齐方式的字符串格式来创建字符列。当您的输出控制台使用固定宽度字体时,这是可行的。
例如你的第一行可以写成
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 文章“复合格式”对此进行了很好的解释