質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

1回答

1400閲覧

C#:String.Format("{0:#,##0}")で0以外の場合末尾に半角スペースが入る原因

mahry

総合スコア37

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

1クリップ

投稿2020/03/30 10:37

編集2020/03/30 11:14

いつもお世話になっています。
お聞きしたい内容は表題の通りなのですが、
同じサイズのラベルにいれたとき

※アンダーバーは空白を表現しています。
long number1 = 1234;
long number2 = 0;
label1.Text = string.Format("{0:#,##0}", number1);
label2.Text = string.Format("{0:#,##0}", number2);

ラベルのAligmentプロパティはRight

label1
1234_

label2
____0

となってしまいます。
ラベルのサイズは同じで、右寄せにしているので右端の位置は同じだと思ったのですが、
このように空白が入っていまうのは、何が原因なのでしょうか。

「String.Format 空白 できる」などで検索をしてみましたが、
該当する記事に行き当たらず困っています。
何かアドバイス等頂けるととても助かります。
情報不足などあれば遠慮なくご指摘いただければと思います。
よろしくお願いします。

環境
Visual Studio 2019

追加
すみません、言葉たらずで申し訳ないのですが、
「ActiveReportsで」不具合が起きています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/03/30 10:43

なりません。エラーになります。
Zuishin

2020/03/30 10:48

編集後を見ても、間違いが増えただけです。うろ覚えで書くのではなく、実際に試したコードをコピペしてください。
mahry

2020/03/30 10:58

Zuishinさん コメントありがとうございます。追加しました。
Zuishin

2020/03/30 11:00

追加の意味がよくわかりませんが、この String は System.String ではないんですか?
mahry

2020/03/30 11:05

System.Stringです
Zuishin

2020/03/30 11:05

エラーになりませんか?
YAmaGNZ

2020/03/30 11:07

"A" + String.Format("{0:#,##0}",number1) + "A"みたいに前後に適当な文字を追加して、本当にスペースが入っているか確認してみてください。
mahry

2020/03/30 11:08

Zuishinさん エラーにはならないですね……。 YAmaGNZさん 試してみます。
mahry

2020/03/30 11:12

YAmaGNZ さん 1234A_ のようにAの後ろに半角スペース1桁分くらいの空白ができました。 0にも同様に末尾にAを付けてみたのですが、こちらもAのあとに空白が入ります。 0以外の時に空白が入ってしまうみたいです。
Zuishin

2020/03/30 11:12

コロンとセミコロンが違いますが、本当にエラーになりませんか? 一文字でも違えばこちらとそちらでの条件が変わります。 もう一度言いますが、コピペしてください。
Zuishin

2020/03/30 11:13

もし本当にエラーにならないのであれば、それは表示されているソースとは違うものをコンパイルしている可能性があります。
Zuishin

2020/03/30 11:16

もう一度確認します。 指摘されたから質問を適当に直したのではなく、コピペしましたか?
mahry

2020/03/30 11:16

コピペしました
Zuishin

2020/03/30 11:17

いじわるで聞いているのではなく、問題の切り分けに必要だから聞いています。
mahry

2020/03/30 11:18

はい、理解しています。 お手数お掛けてしてすみません。
Zuishin

2020/03/30 11:20

それでは、string.Format には無関係です。文字列 "1234" と文字列 "0" でも同じ問題が発生するはずです。
kaina

2020/03/30 11:28 編集

Zuishinさん、質問者が既に質問を修正し、変数の型をvarからlongに変更しています。 mahryさんへ エラーにはならないといいつつ、こっそり修正するのは非常に宜しくありませんよ。
Zuishin

2020/03/30 11:28

もし同じ問題が発生しないのであれば、それを発生させる要因がこの質問に書かれていません。
Zuishin

2020/03/30 11:30

また、1234 ではなく、1,234 になるはずです。 string.Format から離れて、もう少し詳細に他の条件をチェックしてください。
Zuishin

2020/03/30 11:32

kaina さん、了解しました。
Zuishin

2020/03/30 12:09 編集

私の勘では、label1 の Alignment が Left になっています。
YAmaGNZ

2020/03/30 11:40

>1234A_ >のようにAの後ろに半角スペース1桁分くらいの空白ができました。 >0にも同様に末尾にAを付けてみたのですが、こちらもAのあとに空白が入ります。 とのことですが、どのようなコードで確認しましたか? 私が提案したようにString.Format("{0:#,##0}",number1) + "A"という形であればString.Formatは無関係です。 また、Windows.Forms.LabelにはAligmentはありません。 ActiveReportsのLabelなのではないですか? 通常、何の断りもなくLabelコントロールと書かれると、標準で使用できるコントロールだと思ってしまいます。 標準のコントロールでない場合は、分かりやすく記載してください。
Zuishin

2020/03/31 01:33

https://www.grapecity.co.jp/developer/about-us/contact 一応サポートの連絡先貼っときます。 ここに電話して自己解決してください。 問題を解決したい時には、なんとなく詳しそうな人になんとなく適当なイメージで聞くのではなく、どこに原因があるか確かめるためにいくつかテストをして問題を切り分けるのが大事です。 この質問の場合は、全く無関係な string.Format に原因があると決めつけたために解決が遅れています。string.Format に原因があるかもしれないと思ったら、まずそれを使わず試して問題を切り分けます。 返事が不正確なので時間がかかりましたが、聞き取りの結果、原因が ActiveReports の使い方にあることは明白なので、一番手っ取り早いのはマニュアルを読むことですが、それで解決できないときには製造元のサポートに正しい使い方を聞くのが早いと思います。
mahry

2020/03/31 02:35

みなさんコメント等ありがとうございます。 おっしゃること最もで、今後一か所に問題を集中せず、様々な視点から問題を探るように心がけます。 今回の件、Zuishinさんにご案内頂いたサポートを活用して解決していこうと思います。 そこで解決出来次第、自己解決という形になってしまいますが原因等を投稿し共有させていただきたいと思います。 お手数おかけいたしました。ありがとうございました。
guest

回答1

0

やりたいことはnumber1とnumber2を3桁区切り且つ空白で
右寄せしたいということで宜しいでしょうか?
であれば右寄せする桁数がFormatの書式に足りません。
最大桁数が何桁か分かりませんが、とりあえず6桁の場合以下のように書きます。

C#

1 long number1 = 1234; 2 long number2 = 0; 3 System.Console.WriteLine(string.Format("{0,6:#,0}",number1)); 4 System.Console.WriteLine(string.Format("{0,6:#,0}",number2)); 5 6出力結果 7 1,234 8 0

尚、指定する桁数はカンマも含んだ桁数ですので、ご注意下さい。

投稿2020/03/30 11:25

kaina

総合スコア418

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問