尝试对齐输出到控制台的内容
Trying to align what is output to the console
我有一个 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**************************************************");
}
当我输出它时,它看起来像这样:
如您所见,排列得不是很好。我希望中间的百分比值和右边的货币值都右对齐。因此,理想情况下,文本将全部左对齐,带有百分比值的中间区域右对齐,右侧的货币值的外部区域右对齐。我希望这是有道理的。谁能告诉我如何最好地实现这一目标?谢谢。
您可以使用带对齐的字符串格式来创建字符列。当您的输出控制台使用固定宽度的字体时,这是可行的。
例如你的第一行可以写成
Console.WriteLine("{0,-40}{1,-50}", "Employee Name:", empName);
这将在左侧对齐的 40 个字符的列中写入 "Employee Name;",并用空格填充剩余部分以达到 40 个字符的宽度。然后一个宽度为 50 个字符的新列将收到 empname
的值,该值在列
的左侧对齐
所得税税率行可以写成
Console.WriteLine("{0,-30}{1,10:F2}%{2,50:F2}",
"Income Tax:", INCOME_TAX_RATE, incomeTaxPayable);
这会将标签的第一列减少到仅 30 个字符,并添加一个包含 10 个字符的列,该列将填充右对齐的 INCOME_TAX_RATE 的值。当然,这可以在其他行中重复
这在名为 Composite Formatting
的 MSDN 文章中有很好的解释
我有一个 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**************************************************");
}
当我输出它时,它看起来像这样:
如您所见,排列得不是很好。我希望中间的百分比值和右边的货币值都右对齐。因此,理想情况下,文本将全部左对齐,带有百分比值的中间区域右对齐,右侧的货币值的外部区域右对齐。我希望这是有道理的。谁能告诉我如何最好地实现这一目标?谢谢。
您可以使用带对齐的字符串格式来创建字符列。当您的输出控制台使用固定宽度的字体时,这是可行的。
例如你的第一行可以写成
Console.WriteLine("{0,-40}{1,-50}", "Employee Name:", empName);
这将在左侧对齐的 40 个字符的列中写入 "Employee Name;",并用空格填充剩余部分以达到 40 个字符的宽度。然后一个宽度为 50 个字符的新列将收到 empname
的值,该值在列
所得税税率行可以写成
Console.WriteLine("{0,-30}{1,10:F2}%{2,50:F2}",
"Income Tax:", INCOME_TAX_RATE, incomeTaxPayable);
这会将标签的第一列减少到仅 30 个字符,并添加一个包含 10 个字符的列,该列将填充右对齐的 INCOME_TAX_RATE 的值。当然,这可以在其他行中重复
这在名为 Composite Formatting
的 MSDN 文章中有很好的解释