私のアプリケーションでは、UI を自分のラベルで更新しています。番号を #,##0 形式で表示したいと考えています。myClass.getNumberOfFiles は文字列を返します。
myLabel.Text = myClass.getNumberOfFiles();
私のアプリケーションでは、UI を自分のラベルで更新しています。番号を #,##0 形式で表示したいと考えています。myClass.getNumberOfFiles は文字列を返します。
myLabel.Text = myClass.getNumberOfFiles();
文字列を返すと仮定getNumberOfFiles
します(その名前では、そうすべきではありません):
myLabel.Text = int.Parse(myClass.getNumberOfFiles()).ToString("#,##0");
精度0の標準の「数値」フォーマット指定子が必要だと思います:
label.Text = GetNumberOfFiles().ToString("N0");
これは、メソッドを(命名規則)に修正し、 orを返すようにした後です (数値を取得するためのメソッドは文字列を返すべきではありません)。getNumberOfFiles()
GetNumberOfFiles()
int
long
これにより、現在のカルチャに適切なグループ化が使用されます。別のカルチャが必要な場合は、2 番目の引数として指定できます。
int files;
if (int.TryParse(myClass.getNumberOfFiles(), out files)) {
myLabel.Text = files.ToString("N0");
}
数値に既に書式設定がある場合、これは機能しません。ただし、 getNumberOfFiles() の戻り時に誰かが int を文字列に変換していた場合は機能します。getNumberOfFiles() が書式設定された文字列を返す場合は、別のことを行う必要があります。以下では、書式設定が en-US 形式で受信され、たとえばブラジルのポルトガル語で表示したいと想定しています。詳細な方法で表示されるため、必要に応じて他の文化をプラグインする方法がわかります。フォーマットされていて、カルチャ間で変更する必要がない場合、 getNumberOfFiles() の戻り値をラベルの Text プロパティに直接割り当てることができない理由がわかりません。
int files;
var incomingCulture = CultureInfo.CreateSpecificCulture("en-US");
var outgoingCulture = CultureInfo.CreateSpecificCulture("pt-BR");
if (int.TryParse(myClass.getNumberOfFiles(), NumberStyles.Number, incomingCulture, out files)) {
myLabel.Text = files.ToString("N0", outgoingCulture);
}
そうは言っても、整数の文字列を返すのはばかげていると言っている他のすべての人に同意します。しかし、それを変更できる余裕がない場合もあることを私は知っています。
また、"N0" のような名前付きの書式指定子を使用すると、コードをグローバル化する必要があるときに、プログラマーがあなたの背後にいるときに、心の中であなたを祝福することになることも指摘しておきます。これは、すべての CultureInfo インスタンスに名前付きの各形式の実装があるためですが、カスタム形式指定子の実装を持つことは不可能です。