【问题标题】:Trying to align what is output to the console [duplicate]试图将输出到控制台的内容对齐[重复]
【发布时间】:2016-01-24 22:10:38
【问题描述】:

我有一个 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**************************************************");
    }

当我输出它时,它看起来像这样:

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

【问题讨论】:

  • 你可以制作一个 WinForms 应用程序。控制台是您实际上不需要在 UI 上投入任何精力的地方。

标签: c# console alignment


【解决方案1】:

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

例如你的第一行可以写成

Console.WriteLine("{0,-40}{1,-50}", "Employee Name:", empName);

这将写“员工姓名;”在左侧对齐的 40 个字符的列中,用空格填充剩余部分以达到 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 文章中有很好的解释

【讨论】:

  • 谢谢!这很有帮助。我最初使用的是 {0, 10},但因为我也在使用:F2,所以我不知何故认为值 10 在它之后,即 {0:F2, 10}。正如你可以想象的那样,这行不通。我不知道应该是 {0, 10:F2} 感谢您的帮助。 :)
猜你喜欢
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
相关资源
最近更新 更多