C#で数値と文字列の変換をする。ParseやToStringの使い方
アプリケーションを作成する中で、数値と文字列は必ずといってよいほど扱います。
その際に、数値を文字列として扱いたい場面やその逆も多く発生するのではないでしょうか。
この記事では、数値と文字列を変換する方法を紹介しますので、ぜひ参考にしてみてください。
- プログラマー
- 入力された文字列をint型のリストに格納したいのですが、そのまま代入するとエラーとなってしまいます。
- プロジェクト
マネージャー - 文字列はString型なのでデータ型の不一致でエラーとなっているようですね。それでは、int型に変換して格納してみましょう。
実行環境
・Windows 10 Home
・Visual Studio Community 2019
ParseとConvertによる文字列から数値の変換
C#で文字列から数値への変換を行う場合、ParseメソッドやConvertクラスで実現できます。
Parseメソッドによる置換
数値を格納するデータ型としてintやdoubleなどが存在しますが、それらにはParseメソッドが存在します。Parseメソッドは引数の文字列を受け取り、変換した数値を返しますが、文字列に数値以外が指定された場合は例外を発生させます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
String[] list = new String[] { "123", "10a" };
try
{
foreach (String str in list)
{
int ret = Int32.Parse(str);
Console.WriteLine($"{str} -> {ret}");
}
}catch(Exception e)
{
Console.WriteLine($"ERROR:{e.Message}");
}
// → 出力結果は以下となります。
// 123 -> 123
// ERROR:Input string was not in a correct format.
|
“123”は正常に置換されましたが、”10a”にてParseが失敗したため、例外メッセージが出力されていますね。
不正な文字列が指定された場合でも例外を発生させたくない場合は、TryParseメソッドを使用すると良いでしょう。変換可否をbool型で返してくれます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
String[] list = new String[] { "123", "10a" };
try
{
foreach (String str in list)
{
int ret = -1;
if(Int32.TryParse(str, out ret))
{
Console.WriteLine($"【変換成功】{str} -> {ret}");
}
else
{
Console.WriteLine($"【変換失敗】{str}は数値に変換できません。");
}
}
}
catch (Exception e)
{
Console.WriteLine($"ERROR:{e.Message}");
}
// → 出力結果は以下となります。
// 【変換成功】123 -> 123
// 【変換失敗】10aは数値に変換できません。
|
例外メッセージの代わりに、戻り値がfalseのメッセージが出力されています。
Convertクラスによる置換
Convertクラスには、様々な数値型への変換メソッドが用意されています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
String[] list = new String[] { "123", "10a" };
try
{
foreach (String str in list)
{
int ret = Convert.ToInt32(str);
Console.WriteLine($"{str} -> {ret}");
}
}catch(Exception e)
{
Console.WriteLine($"ERROR:{e.Message}");
}
// → 出力結果は以下となります。
// 123 -> 123
// ERROR:Input string was not in a correct format.
|
Parseの場合と同じく、数値の文字列は正しく変換され、不正な文字列では例外が発生していますね。
ParseメソッドとConvertクラスの違い
ParseとConvertで置換した場合の一番の違いはnullの扱いとなります。引数でnullが指定された場合、それぞれどのような動きとなるのでしょうか。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
//Parse
try
{
int ret = Int32.Parse(null);
Console.WriteLine($"[Parse ] null -> {ret}");
}
catch (Exception e)
{
Console.WriteLine($"[Parse ] ERROR:{e.Message}");
}
//Convert
try
{
int ret = Convert.ToInt32(null);
Console.WriteLine($"[Convert] null -> {ret}");
}
catch (Exception e)
{
Console.WriteLine($"[Convert] ERROR:{e.Message}");
}
// → 出力結果は以下となります。
// [Parse ] ERROR:Value cannot be null. (Parameter 's')
// [Convert] null -> 0
|
引数にnullを渡した場合、Parseメソッドでは例外が発生しており、Convertクラスでは0が返っています。
ToStringメソッドによる数値から文字列の変換
C#で数値から文字列への変換を行う場合、ToStringメソッドで実現できます。
1
2
3
4
5
|
int num = 10;
String numStr = num.ToString();
Console.WriteLine($"numStr = {numStr}");
// → 出力結果は以下となります。
// numStr = 10
|
int型からString型に変換して出力できていますね。
ToStringメソッドでは、書式指定を利用して0埋めをすることも可能です。
1
2
3
4
5
|
int num = 10;
String numStr = num.ToString(“0000”);
Console.WriteLine($"numStr = {numStr}");
// → 出力結果は以下となります。
// numStr = 0010
|
ToStringメソッドの引数に「0000」を指定したことにより、不足桁数分が「0」で埋められて「0010」が出力されていますね。
- プログラマー
- なるほど、このような便利なメソッドが複数あったのですね。たくさん覚えてコーディングに活用していきたいです。
- プロジェクト
マネージャー - そうですね。便利なメソッドを使いこなしていくと、品質の高いコードをスピーディーに書くことができると思います。
数値と文字列の変換方法は複数ある
今回は、数値と文字列の変換方法を紹介しました。ToStringは書式指定によって、様々な変換が可能となっており大変便利です。ParseメソッドやTryParseメソッド、Convertクラスについても、使用方法がシンプルで分かりやすいと思うので、メソッドの使い方を覚えて、ぜひ活用してみてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)