• ベストアンサー

C# ToStringでの数字桁揃えの仕方

C#でこの表記を double x = 5.5; Console.WriteLine("{0,2:0}個",x); このToStringを使って表したいのですが、どう表記すればいいのでしょうか? 桁揃え表示がわかりません。 double x = 5.5; Console.WriteLine(x.ToString("0"));

  • jyuzou
  • お礼率77% (238/307)

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

ToString ではできません。 ToString で指定できるのは {番号,文字数:書式} の書式の部分だけです。 コンソールへの出力ではなく、文字列に整形するだけなら、string.Format を使います。 double x = 5.5; string s = string.Format("{0,2:0}", x);

jyuzou
質問者

お礼

早々の回答に感謝いたします。 どうもありがとうございました。

関連するQ&A

  • C#のToString("c")

    C#で、テキストボックスに金額を記入し、のちに取り出して数値として使いたいのですが、ToString("c")でフォーマットして記入した場合は通貨記号が取れませんでした。 なぜでしょうか? 何か良い方法がありますでしょうか? よろしくお願いいたします。 //ToString("c")を使わないで記入した場合 textBox1.Text = "-\\12345"; string stTarget; stTarget = textBox1.Text; Console.WriteLine("1stTarget=" + stTarget); stTarget = stTarget.Replace(",", ""); Console.WriteLine("2stTarget=" + stTarget); stTarget = stTarget.Replace("\\", ""); Console.WriteLine("3stTarget=" + stTarget); //出力結果 //1stTarget=-\12,345 //2stTarget=-\12345 //3stTarget=-12345 //ToString("c")を使って記入した場合 int tempNum = -12345; textBox1.Text = tempNum.ToString("c"); stTarget = textBox1.Text; Console.WriteLine("1stTarget=" + stTarget); stTarget = stTarget.Replace(",", ""); Console.WriteLine("2stTarget=" + stTarget); stTarget = stTarget.Replace("\\", ""); Console.WriteLine("3stTarget=" + stTarget); //出力結果 //1stTarget=-\12,345 //2stTarget=-\12345 //3stTarget=-\12345

  • C# String.IndexOfのバグですか?

    C# String.IndexOfのバグですか? 非常に単純なコード String s = ",a,b,c,d,e"; int left; left = s.IndexOf(',', 0, 1); Console.WriteLine(left.ToString ()); left = s.IndexOf(',', 0, 2); Console.WriteLine(left.ToString()); left = s.IndexOf(',', 1, 1); Console.WriteLine(left.ToString()); left = s.IndexOf(',', 1, 2); Console.WriteLine(left.ToString()); 結果: 0 0 -1 2 もしかして、バグですか???

  • C#で独自の型を定義したい

    C# 2010 version 4.0を使用しています。 次のようなint型とstring型を混合したMixedという型を定義したいのですが、 public class Mixed { private int _TheInt = 0; public int TheInt { get { return _TheInt; } set { _TheInt = value; } } private string _TheString = null; public string TheString { get { return _TheString; } set { _TheString = value; } } public static implicit operator int(Mixed m) { return m.TheInt; } public static implicit operator Mixed(int x) { Mixed m = new Mixed(); m.TheInt = x; return m; } public static implicit operator string(Mixed m) { return m.TheString; } public static implicit operator Mixed(string x) { Mixed m = new Mixed(); m.TheString = x; return m; } } //Mixed m = 1; //Console.WriteLine(m); //これだとコンパイルエラーになる //Console.WriteLine(m.TheInt.ToString()); //「1」と表示される int i = 1; Console.WriteLine(i); //「1」と表示される object o = 1; Console.WriteLine(o); //「1」と表示される Console.WriteLineなどで表示する場合に 例えばint型なら int i = 1; Console.WriteLine(i); //「1」と表示される という具合にそのまま「1」と表示されます。 でもこのMixedの場合、 Mixed m = 1; Console.WriteLine(m.TheInt.ToString()); //「1」と表示される これでは「1」と表示されるのですが、 Console.WriteLine(m); //これだとコンパイルエラーになる このやり方だとエラーになります。 なんとかしてint型やobject型のようにToString()を使わずに 表示させることはできないでしょうか?

  • C#(VS2013)の漢字<-->数値変換について

    C#(VS2013)の漢字、数値変換に関する質問です。 下記のコードは、文字を数値、数値を文字に変換するものです。 この場合、文字が"A"の場合は、相互に変換できますが、 文字が "換" の場合は、変換出来ません。 Q1)この件に関しまして、回答、コメント頂けますと大変有難いです。 //Project: c:\wk_VS2013ACs\TT_CharCLR.sln using System; using System.Text; public static class Program { public static void Main() { Char c; Int32 n; string str = "シフトJISへ変換"; Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS"); byte[] bytes = sjisEnc.GetBytes(str); Console.WriteLine(BitConverter.ToString(bytes)); // 出力:83-56-83-74-83-67-4A-49-53-82-D6-95-CF-8A-B7 // Convert number <-> character using C# casting // c = (Char)0x95CF; 変 // c = (Char)0x8AB7; 換 //c = (Char)65; c = (Char)0x8AB7; //<------旨く行かず Console.WriteLine(c); // Displays "A" n = (Int32)c; Console.WriteLine(n); // Displays "65" c = unchecked((Char)(65536 + 65)); //============= Console.WriteLine(c); // Displays "A" // Convert number <-> character using Convert c = Convert.ToChar(65); Console.WriteLine(c); // Displays "A" n = Convert.ToInt32(c); Console.WriteLine(n); // Displays "65" // This demonstrates Convert's range checking try { c = Convert.ToChar(70000); // Too big for 16 bits // c = Convert.ToChar(0x95CF); // Too big for 16 bits Console.WriteLine(c); // Doesn't execute } catch(OverflowException) { Console.WriteLine("Can't convert 70000 to a Char."); } // Convert number <-> character using IConvertible c = ((IConvertible)65).ToChar(null); Console.WriteLine(c); // Displays "A" n = ((IConvertible)c).ToInt32(null); Console.WriteLine(n); // Displays "65" Console.ReadKey(); }//public static void Main() { }//namespace

  • C#の変数の範囲

    C#の変数の範囲 質問させてください。 以下は、ネットに掲載されていたC#の問題です。 ~ここから~ 下記のC#のコードを実行した場合、"Hello World!"と二行表示されます。 using System; class Program { static void Main(string[] args) { string s = "Hello"; Action a = () => Console.WriteLine(s); s += " World!"; a(); Console.WriteLine(s); } これを一行目だけ"Hello"と表示される場合、 Action a = () => Console.WriteLine(s);をどう書き換えればよいでしょうか。 1. Action a = () => Console.WriteLine("Hello!"); 2. Action<string> a = (s) => Console.WriteLine(s); 3. Action a = () => Console.WriteLine(t - " World!"); 4. string t = s; Action a = () => Console.WriteLine(t); 5. Action a = () => { string t = s; Console.WriteLine(t); }; ~ここまで~ 正解は4だそうですが、「何故」そうなるかがわかりません。 汗 私としては、1.4.も題意を満たす気がするのですが・・・。 お知恵をお貸しください。 出展 http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_07/extremecs_07_10.html

  • [C#]順序通りに実行されない

    次のC#のプログラムについて質問です。 //ここから using System; class Myclass { double[] point; string[] name; int nMax; public double this[string str] { get { for (int i = 0; i < nMax; i++) { if (str == name[i]) return point[i]; } return -1.0; } set { for (int i = 0; i < nMax; i++) { if (str == name[i]) { point[i] = value; break; } } } } public Myclass(int n) { point = new double[n]; name = new string[n]; nMax = n; setname(); } void setname() { for(int i=0;i<nMax;i++) { Console.Write("生徒名[{0}] = ",i); name[i] = Console.ReadLine(); } } } class ch08ex02 { public static void Main() { Console.WriteLine( "まずはじめに生徒数と、全員の名前入力が必要です"); Console.Write("生徒数--- "); string strn = Console.ReadLine(); Myclass mc = new Myclass(int.Parse(strn)); string ans, strp; Console.WriteLine("X入力で終了"); while (true) { Console.Write("点数を入力したい生徒名--- "); if ((ans = Console.ReadLine()) == "X") break; Console.Write("点数--- "); strp = Console.ReadLine(); mc[ans] = double.Parse(strp); } Console.WriteLine(); Console.WriteLine("X入力で終了"); while (true) { Console.Write("点数を知りたい生徒名--- "); ans = Console.ReadLine(); if (ans == "X") break; Console.WriteLine("{0}くんの点数は{1}点です", ans, mc[ans]); } } } //ここまで これはプロパティを使って生徒の点数を配列に格納したり参照したりするプログラムですが、実行するとMain()の    Console.Write("生徒数--- "); string strn = Console.ReadLine(); Myclass mc = new Myclass(int.Parse(strn)); string ans, strp; Console.WriteLine("X入力で終了");    while (true) { Console.Write("点数を入力したい生徒名--- "); if ((ans = Console.ReadLine()) == "X") break; Console.Write("点数--- "); strp = Console.ReadLine(); mc[ans] = double.Parse(strp); } の部分が思い通りに動いてくれません。 まずコンソールに「生徒数--- 」と表示されConsole.ReadLine()で数字を受け取り、その数からMyclassのインスタンスを作成し、「X入力で終了」と表示した後whileループで生徒名と点数の入力を受け付けるはずです。 しかしこれを実行すると「X入力で終了」と表示する前にwhileループに入り、ループを抜けた後「X入力で終了」と表示されます。 つまり順番が逆になっているわけです。 なぜこうなるかわかりません。 誰か教えてください、お願いします。

  • c#でサンプルゲームを作ってみた

    c#でサンプルゲームを作ってみたのですがエラーがでるので間違っている所を指摘してくださいm(__)m using System; class test1 { public int HP; public int ATK; public int DF; } public class test2 { public static void Main() { test1 player1 = new test1(); test1 player2 = new test1(); player1.HP = 150; player2.HP = 150; char ch; char ken; char zyuu; char chois; int buki; for(;;){ do{ Console.WriteLine(" 使う武器を選んでください"); Console.WriteLine("¥n"); Console.WriteLine(" 1. 刀 "); Console.WriteLine("¥n"); Console.WriteLine(" 2. 拳銃 "); Console.WriteLine("¥n"); Console.WriteLine(" 3. 素手 "); Console.WriteLine(" 終了させたい場合は e"); do{ ch = (char) Console.Read(); } while(ch == '¥n' | ch == '¥r'); }while(ch < '1' | ch > '3' & ch != 'n'); if(ch == 'n') break; Console.WriteLine("¥n"); switch(ch){ case '1': Console.WriteLine(" どの刀を使いますか?"); Console.WriteLine(" 1. 太刀"); Console.WriteLine(" 2薙刀"); ken = (char) Console.Read(); while(ken == '¥n' | ken == '¥r'); Console.WriteLine("¥n"); switch(ken){ case '1': buki = 15; break; case '2': buki = 14; break; } case '2': Console.WriteLine(" どの銃を使いますか?"); Console.WriteLine(" 1.マシンガン"); Console.WriteLine(" 2.リボルバー"); zyuu = (char) Console.Read(); while(zyuu == '¥n' | zyuu == '¥r'); Console.WriteLine("¥n"); switch(zyuu){ case'1': buki = 10; break; case'2': buki = 15; break; } case'3': buki = 8; break; } Console.WriteLine("敵が現れた!"); for(;;){ if(plyer1.HP < 0) break; else(player2.HP < 0 ) break; Console.WriteLine(" 1.攻撃¥n 2.防御"); chois = (char) Console.Read(); while(chois == '¥n' | chois == '¥r'); Console.WriteLine("¥n"); switch(chois){ case'1': Console.WriteLine("player1の攻撃!!"); player2.HP = player2.HP - (buki + 10) - 5; Console.WriteLine("%d, player2.HP") ; Console.WriteLine("player2の攻撃!!"); player1.HP = player1.HP - (20 - 5); break; case'2': Console.WriteLine(" player1はガードした!!"); Console.WriteLine("player2の攻撃!!"); Console.WriteLine(" しかしplayer1は攻撃を防いだ!"); break; } } } } }

  • C#のインクリメント演算子のオーバーロード(前置きと後置き)

    インクリメント演算子をオーバーロードして、後置きインクリメントの場合に戻り値が演算前の結果を返すようにする方法はありませんか? class Sample {  public int x;  public int y;  public Sample(int x, int y)  {   this.x = x;   this.y = y;  }  public override string ToString()  {   return base.ToString() + " - x = " + x + ", y = " + y;  }  public static Sample operator ++()  {   x++; y++;   return this;  } } class EntryPoint {  public static void Main()  {   Sample sample = new Sample(1, 2);   // 「Sample - x = 2, y = 3」で、期待通り   Console.WriteLine(++sample);   // 「Sample - x = 3, y = 4」で、期待したのはインクリメントされる前の値である「「Sample - x = 2, y = 3」   Console.WriteLine(sample++);  } }

  • C#でカレンダーを作っているのですがここから先がわかりません。どなたかおしえてもらえませんか?

    using System; using System.Collections.Generic; using System.Text; namespace 万年カレンダー { class MyEventCiass { static void Main(string[] args) { int nen, tuki,tukinohi,youbi;    //西暦の入力 System.Console.Out.WriteLine("西暦を入力してください。"); nen = int.Parse(Console.ReadLine()); //月の入力 System.Console.Out.WriteLine("月を入力してください。"); tuki = int.Parse(Console.ReadLine()); //西暦と月の出力 Console.WriteLine(nen + "年" + tuki + "月"); switch (tuki) { case 2: if (nen % 4 == 0 && (nen % 100 != 0 || nen % 400 == 0)) tukinohi = 29; else tukinohi = 28; break; case 4: case 6: case 9: case 11: tukinohi = 30; break; default: tukinohi = 31; break; } if (tuki == 1 || tuki == 2) { nen = nen -1 ; tuki = tuki + 12; } //曜日の出力 Console.WriteLine("日 月 火 水 木 金 土"); youbi = (nen + nen / 4 - nen / 100 + nen / 400 + (13 * tuki + 8) / 5 + 1) % 7; if (youbi == 0) youbi = 7; for (int i = 1; i <= youbi ;i += 1 ) { Console.Write(i.ToString()); } for (int i = 4; i <= tukinohi; i += 1) { Console.Write(i.ToString()); } Console.ReadLine(); } } }

  • C# 画面のちらつきを解消したい

    C#でウィンドウズアプリケーションを作っています。 ある処理範囲内でRefreshやInvalidateが大量にあり、画面がちらついてしまいます。 このRefreshやInvalidateの処理を一時的に無効にすることはどのようにすれば良いのでしょうか? アドバイスよろしくお願いします。 private void button1_Click(object sender, System.EventArgs e) {   Console.WriteLine("何かの処理実行中・・・");   //ここから   for(int i=1; i<=1000; i++)   {     System.Threading.Thread.Sleep(1);     label1.Text=i.ToString();     this.Refresh();     this.Invalidate(true);   }   //ここまで のちらつきを防止したい   //(実際の処理は単純なループではない)   label1.Text="end";   Console.WriteLine("引き続き何かの処理実行中・・・"); }