簡體   English   中英

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

[英]Accounting Style string format in ASP.NET

我想知道將字符串格式化為會計樣式的最簡單方法。 我知道如何使用{0:c}格式化貨幣,但會計風格存在一些差異,例如,所有美元符號將與所有小數點對齊,負數用括號表示,而不是用“ - ”減號。 如果將單元格格式化為帶有2位小數的“會計”,您可以在Excel中找到我想要的方式的一個很好的例子。

忽略您的對齊要求,您可以使用

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

支持負數。

要對齊您的數字,您必須在沒有貨幣符號的情況下進行格式化,並使用空格填充格式化的數字,使用固定寬度字體可以使您更輕松地完成這項工作。

編輯:

似乎String.Format是你的朋友:

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

其中15是輸出的總寬度,您需要將此文本附加到貨幣符號。 (同樣,這只在固定寬度上對齊)

沒有用於處理會計風格格式的格式字符串快捷方式(具有默認規則的單字符)( 這里是帶有可用格式字符串的備忘單 )所以你必須寫一個更具體的(如Patrick的回答)或你自己的解析方法。

對齊要求將特定於您如何顯示它們。 我假設您正在使用表格,在這種情況下,您受到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)
  • 選擇(會計)NumberFormat,如屏幕截圖#1所示:

截圖#1:

截圖1

  • 選擇“更多數字格式”。
  • 選擇“自定義”。
  • 選擇任何預定義的公式(參見屏幕截圖#2)

截圖#2:

截圖2

就我而言,這是此數字所需的格式。


這方面的負面影響是,當您選擇應用了格式的單元格時,您將看不到DropDownList中的選定(會計)“數字格式”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM