ASP.NET中的Accounting Style字符串格式

时间:2009-03-30 17:00:01

标签: asp.net string-formatting

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

6 个答案:

答案 0 :(得分:4)

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

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

支持负数。

要对齐您的数字,您必须在没有货币符号的情况下进行格式化,并使用空格自行填充带格式的数字,使用固定宽度的字体可以使您的工作更轻松。

编辑:

似乎String.Format是你的朋友:

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

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

答案 1 :(得分:3)

没有用于处理会计风格格式(here's a cheat sheet with the available format strings)的格式字符串快捷方式(具有默认规则的单字符快捷方式),因此您必须编写更具体的格式(如Patrick的答案)或您自己的解析方法

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

答案 2 :(得分:1)

this blog中,列出了一些不同的格式,这个格式似乎接近您所寻找的格式:

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)"

它不处理填充(您可能必须自己修复),但它确实有正确的括号。

答案 3 :(得分:1)

您可以使用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();
     }

答案 4 :(得分:0)

您可以使用String.Format的格式字符串来获取您要完成的任务。唯一的技巧是正数,因为它们没有右括号,如果它们将与列中的任何负数对齐,则必须在末尾加入一个空格。诀窍是以HTML不会忽略的方式将该空间放入字符串中。我只是使用HTML实体& nbsp;这表示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);
    }
}

答案 5 :(得分:-1)

我按照这些步骤应用&#34;会计&#34;格式。

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

屏幕截图#1:

Screenshot 1

  • 选择&#34;更多数字格式&#34;。
  • 选择&#34;自定义&#34;。
  • 选择任何预定义的公式(参见屏幕截图#2)

屏幕截图#2:

Screenshot 2

就我而言,这是此号码的理想格式。

否定方面是当你选择应用了格式的单元格时,你不会在DropDownList&#34;中看到所选的(会计)&#34;数字格式。