ASP.NETの会計スタイルの文字列形式
-
22-08-2019 - |
質問
文字列を会計スタイルとしてフォーマットする最も簡単な方法を知りたいと思います。 {0:c}を使用して通貨としてフォーマットする方法は知っていますが、会計スタイルにはいくつかの違いがあります。たとえば、すべてのドルサインはすべての小数点と同様に並んでおり、ネガは括弧ではなく括弧で表現されます。 "-" マイナス記号。 2つの小数点以下の場所を持つ「会計」としてセルをフォーマットすると、Excelで私がそれを望む方法の良い例を見つけることができます。
解決
アラインメント要件を無視すると、使用できます
number.ToString("€#,##0.00;(€#,##0.00);Zero")
負の数をブラケットにします。
数値を調整するには、通貨記号なしでフォーマットする必要があり、フォーマットされた数字をスペースで自分でパッドにパッドする必要があります。固定幅フォントを使用すると、このジョブが簡単になります。
編集:
string.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>
さて、CodeBehind。
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);
}
}
「会計」形式を適用するために、これらの手順に従いました。
- Excelの新しい本で、セルを選択してください。
- データを挿入します (つまり、任意の数字;この例では、80000を追加).
- スクリーンショット#1に示されているように、(アカウンティング)ナンバーフォームを選択してください:
スクリーンショット#1:
- 「その他の数字形式」を選択します。
- 「カスタム」を選択します。
- 事前に定義された式のいずれかを選択します (スクリーンショット#2を参照).
スクリーンショット#2:
私の場合、これはこの番号の目的の形式です。
ネガティブ この辺は、フォーマットが適用されているセルを選択すると、[ドロップダウンリスト]番号形式で選択された(アカウンティング)が表示されないことです。