我想知道将字符串格式化为会计风格的最简单方法。我知道如何使用 {0:c} 格式化为货币,但会计风格存在一些差异,例如,所有美元符号以及所有小数点都将对齐,负数用括号而不是用“-”减号。如果将单元格格式设置为带有两位小数的“会计”,您可以在 Excel 中找到一个很好的示例来说明我希望的方式。

有帮助吗?

解决方案

忽略您的对齐要求,您可以使用

number.ToString("€#,##0.00;(€#,##0.00);Zero")

括号负数。

为了使您的数字对齐,您必须在没有货币符号的情况下格式化,并用空格自己填充格式的数字,使用固定宽度字体将使您更轻松。

编辑:

似乎字符串。Format是您的朋友:

String.Format("{0,15:#,##0.00 ;(#,##0.00);-   }", number)

其中15是输出的总宽度,您需要将此文本附加到您的货币符号上。 (同样,这仅在固定宽度上对齐)

其他提示

没有用于处理会计样式格式的格式字符串快捷方式(具有默认规则的单个字符)(这是一个带有可用格式字符串的备忘单)因此,您必须编写一个更具体的(例如帕特里克的答案)或自己的解析方法。

对齐要求将特定于您如何显示它们。我假设您正在使用表,在这种情况下,您受HTML支持的内容的限制,并且不支持Excel等会计风格对齐。

这个博客 概述了一些各种格式,这似乎与您想要的内容接近:

int neg = -10;
int pos = 10;
// C or c (Currency): It represent how many decimal place of zeros to show.
String.Format("{0:C4}", pos);      //"$10.0000"
String.Format("{0:C4}", neg);      //"($10.0000)"

它无法处理填充物(您可能必须自己修复),但是它确实具有适当的括号。

您可以使用Patricks方法的变体做某事。假设您知道所处理的价值的上限,这将处理格式和对齐方式:

private static string OutputAsCur(decimal val)
{
    string format = "  #,##0.00 ; (#,##0.00);Zero";
    string frmt = val.ToString(format);
    return CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol + frmt.PadLeft(15, ' ');
}

这是一个简单的示例应用程序,可以查看格式:

    static void Main(string[] args)
    {
        decimal d = 155.55m;

        Console.WriteLine(OutputAsCur(d));
        Console.WriteLine(OutputAsCur(d * -1));
        Console.WriteLine(OutputAsCur(1002.32m));
        Console.WriteLine(OutputAsCur(1002.32m * -1));
        Console.ReadLine();
     }

您可以使用 String.Format 的格式字符串来获取您想要完成的任务。唯一的技巧是正数,因为它们没有右括号标记,所以如果它们要与列中的任何负数对齐,则必须在末尾包含一个空格。技巧是以 HTML 不会忽略的方式将该空格放入字符串中。我只是使用 HTML 实体它表示 HTML 中的不间断空格。

这是示例代码。首先,在aspx.

<table>
...
    <tr>
        <th scope="row" colspan="2">Total Revenue</th>
        <td class="numeric total"><asp:Label runat="server" ID="TotalRevenueLabel" /></td>
    </tr>
...
</table>

现在,代码隐藏。

public const string kMoneyFormat = "#,#.00'&nbsp;';(#,#.00);'-.--&nbsp;'";

public void DataBind()
{
    using (FinancialDataContext sql = new FinancialDataContext())
    {
        var periodQuery = from m in sql.Forecasts()
                          select m;
        ForecastsResult periodData = periodQuery.Single();
        decimal totalRevenue = period.Data.income_actual.Value + periodData.other_income.Value;
        TotalRevenueLabel.Text = totalRevenue.ToString(kMoneyFormat);
    }
}

我遵循这些步骤以应用“会计”格式。

  • 在一本关于Excel的新书中,选择一个单元格。
  • 插入数据 (即任何数字;对于此示例,添加80000).
  • Select(Accounting)NumberFormat如屏幕截图#1:

屏幕截图#1:

Screenshot 1

  • 选择“更多数字格式”。
  • 选择“自定义”。
  • 选择任何预定义的公式 (请参阅屏幕截图#2).

屏幕截图#2:

Screenshot 2

就我而言,这是此数字的所需格式。


消极的 这是一方面是,当您选择使用上应用格式的单元格时,您将不会看到选定的(会计)“在下拉列表中”数字格式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top