常に符号を表示するカスタム数値フォーマット文字列


188

標準またはカスタムの数値フォーマット文字列を指定して、常に+ veまたは-veである符号を出力する方法はありますか(ゼロに対して何をすべきかはわかりませんが!)

回答:


296

はい、できます。条件付き書式があります。MSDNの条件付き書式を参照してください

例えば:

string MyString = number.ToString("+0;-#");

セミコロンで区切られた各セクションが正の数と負の数を表す場合

または:

string MyString = number.ToString("+#;-#;0");

ゼロにプラス記号を付けたくない場合。


1
ネガがマイナスにならないバグを修正しました。
ロマン・スターコフ

本当にありがとうございます!C#のprintfの「+」フラグに相当するものを理解するために、1時間ほど頭を悩ませてきました。あなたが答えをくれました。
rbaleksandar 2012年

4
+#;-#、値0の場合、実際の0はなく、単に「+」を取得します。0を「+0」として表示したいので、これは機能します+#;-#;+0
orion elenzil 14

3
ありがとう!これと混ぜる''ことは素晴らしいことをします!これを見てください:Changes.ToString("'('#' ▲)';'('#' ▼)';''")!これにより、多くの時間と数百のifステートメントを節約できました。:)
Shahab

1
@orionelenzil同じ問題がありました。この答えの+0;-#代わりにあなたも行うことができ+#;-#;+0ました。
Kamil Szot、2015

56

条件付き書式を使用する場合、負の値が自動的に符号を取得しないことに注意してください。あなたがする必要があります

string MyString = number.ToString("+#;-#;0");

他の人が指摘したように、+0;-#よりクリーンなコードで同じ結果が得られます。
Andrew

32

string.Format();でフォーマット文字列を使用することもできます。書式文字列は、コロン( ':')でインデックスから区切られます

var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);

数値{+1、-1、0}の場合:

1、強制符号+1、ゼロの符号なし+1
-1、強制符号-1、ゼロの符号なし-1
0、強制符号+0、ゼロの符号なし0

string.Format同じ結果を得るのではなく、補間された文字列を使用することもできます。

var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";

回答の最後の行には、「デフォルトのフォーマット0、強制符号+、ゼロ0の符号なし」と書かれているはずです。これは+#;-#、値0 のフォーマットの実際の結果です
カミルゾット

カミルさん、ありがとうございます。強制記号の形式を修正しました:+#;-#; + 0(+#;-#ではなく)
Edward

1
より単純な形式で強制署名動作を取得できます+0;-#。:)
Andrew

@Andrew、確かに、0が+0としてフォーマットされることが明確になるので、私は優先+#;-#;+0+#;-#ます
Edward

10

他の回答とは異なり、+ 1、-1、+ 0(引数1、-1、0)を取得する場合は、次の形式を使用する必要があります。

String.Format("{0:+#;-#;+0}", 0));  // output: +0

または

String.Format("{0:+0;-#}", 0));  // output: +0

だけを使用する場合、0の場合は(ではなく)+#;-#だけが表示されます。++0

"#"カスタム指定子https://msdn.microsoft.com/en-us/library/0c899ak8.aspxにあります

この指定子は、ゼロが文字列内の唯一の数字であっても、有効数字ではないゼロを表示することはありません。表示されている数値の有効数字である場合にのみ、ゼロが表示されます。

また、小数精度が必要な場合は、次のように指定する必要があることに注意してください。

String.Format("{0:+0.##;-#.##}", 0));  // output: +0

または、常に表示したくない場合は、次のようにします。

String.Format("{0:+0.00;-#.00}", 0));  // output: +0.00

1

任意のタイプの数値式の場合:

+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0

3つのケースで3つの部分を使用:正、負、ゼロ

例の他の側面:

  • ゼロは署名されていません。「ゼロ」など、何でも表示できます。

  • 絶対値が1未満の場合、小数点の前に0が付きます。好みに合わせて調整してください。

  • 桁数は、最大および最小の絶対10進値です。好みに合わせて調整してください。

  • 小数点文字は文化に固有です。.NETの代替。

  • グループ化区切り文字はオプションです。文字は文化固有です。.NETの代替。(位置もカルチャ固有ですが、フォーマット文字列によってのみ制御されます。)Formatの特殊文字(、。#0を含む)以外の文字も使用します。


0

私はコメントできないので、ここで答えを出します(ナッツ評判システム....)

number.ToString( "+ 0;-#")を使用してUTC文字列TimeFormatを生成できます

ここにPowerShellコードで示した

"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"

ありがとう@gcores https://stackoverflow.com/users/40256/gcores

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.