web-dev-qa-db-ja.com

0.ToString( "#。##")が0.00または少なくとも0ではなく空の文字列を返すのはなぜですか?

0.ToString("#.##")が空の文字列を返すのはなぜですか? 0.00または少なくともであってはなりませんか?

110
user960567

文字列形式の#は、値がオプションであることを示します。出力0.00を取得するには、次のものが必要です。

0.ToString("0.00");

カスタム数値形式についてはこちら を参照してください。このメソッドに渡すことができます。

180
Rich O'Kelly

フォーマット文字列では、#がオプションの文字プレースホルダーを示すために使用されるためです。 neededが数値を表す場合にのみ使用されます。

代わりにこれを行うと:0.ToString("0.##");を取得します:0

興味深いことに、これを行うと:0.ToString("#.0#");を取得します:.0

3桁すべてが必要な場合:0.ToString("0.00");は以下を生成します:0.00


コメントからこの回答まで、あなたの議論は

数値が0の場合に空の文字列を見たいと思うのはなぜでしょうか?

応答は簡単です:表示方法を選択できます。それが、カスタムフォーマット文字列の目的です。 必要に応じて間違ったフォーマット文字列を選択しただけです

130
Andrew Barber

Digit Placeholderに関するドキュメントによると。

フォーマットされる値のフォーマット文字列で「#」が表示される位置に数字がある場合、その数字は結果文字列にコピーされます。それ以外の場合、結果文字列のその位置には何も保存されません。この指定子は、文字列内の唯一の数字が「0」であっても、有効数字でない場合は「0」文字を表示しません。表示されている数字の有効数字である場合、「0」文字が表示されます。 「##」形式の文字列により、値は小数点の前の最も近い桁に丸められます。ゼロからの丸めは常に使用されます。たとえば、34.5を「##」でフォーマットすると、値は35になります。

ゼロを表示する場合は、Zero PlaceHolderを使用します

フォーマットされている値のフォーマット文字列で「0」が表示される位置に数字がある場合、その数字は結果文字列にコピーされます。小数点の前の左端の「0」と小数点の後の右端の「0」の位置は、結果文字列に常に存在する数字の範囲を決定します。
「00」指定子を使用すると、値は小数点の前の最も近い桁に丸められます。ゼロからの丸めは常に使用されます。たとえば、34.5を「00」でフォーマットすると、値は35になります。

20
Miguel Madero

これを試してください0.ToString("#,##; #,##;0")

https://docs.Microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings#SectionSeparator

最初のセクションは正の値に適用され、2番目のセクションは負の値に適用され、3番目のセクションはゼロに適用されます。

2
nektobit