![](/img/trans.png)
[英]How to format date string in asp.net gridview column to another style that i prefer?
[英]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' ';(#,#.00);'-.-- '";
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.