文字列を数値に変換する

文字列を数値に変換します。

ここでは整数型をやりますが、doubleなどの浮動小数点の場合はint を doubleなどに置き換えていけば対応できます。

文字列を単純に数値に変換。Parse関数

一番簡単な変換です。Parseメソッドを使用します。文字列が必ず数値だという場合に使用してください。数値以外の文字列が入ると例外が発生します。

string str1 = "123";

int num1 = int.Parse(str1);

文字列に変換できない可能性がある場合。TryParse関数

数値に変換できない場合、falseを返します。数値以外の文字列が来る可能性がある場合、こちらを使用します。普段からこちらの関数を使うのが安全かと思います。

string str1 = "123";
int num1 = -1;

if (int.TryParse(str1, out num1) == true)
{
    Console.WriteLine($"変換成功:num1 = {num1}");
} else
{
    Console.WriteLine($"変換失敗:num1 = {num1}");
}

string str2 = "abc";
int num2 = -1;

if (int.TryParse(str2, out num2) == true)
{
    Console.WriteLine($"変換成功:num2 = {num2}");
} else
{
    Console.WriteLine($"変換失敗:num2 = {num2}");
}

これを実行すると以下になります。

変換成功:num1 = 123
変換失敗:num2 = 0

初期値として-1をセットしても変換に失敗すると数値は0に戻るので注意です。
falseが来た場合は、処理をそこで中断するか別途初期値をセットする必要があるかと思います。

TryParseを短くする

数値のチェックを1行にしました。変換に失敗したときは初期値を設定しています。returnする場合は、初期値を設定しているところをreturnに変えれば大丈夫です。

string str1 = "123";
int num1;

if (int.TryParse(str1, out num1) == false) num1 = -1;

Console.WriteLine($"変換:num1 = {num1}");

string str2 = "abc";
int num2;

if (int.TryParse(str2, out num2) == false) num2 = -1;
Console.WriteLine($"変換:num2 = {num2}");

事項結果です。

変換:num1 = 123
変換:num2 = -1

Convert.Int32で変換する

Convert.Int32でもint.parse同様変換できます。エラーが発生してもいいようにtry~catchを付けてみました。

string str1 = "123";
string str2 = "abc";
int num1 = -1;
int num2 = -1;

try
{
    num1 = Convert.ToInt32(str1);
    Console.WriteLine($"変換した値:{num1}");

    num2 = Convert.ToInt32(str2);
    Console.WriteLine($"変換した値:{num2}");
}
catch (FormatException)
{
    Console.WriteLine("入力文字列が数値ではない。");
}
catch (OverflowException)
{
    Console.WriteLine("数値がIntの範囲を超えてしまっている");
}

実行結果は以下になります。数値ではない文字列を変換しているため、FormatExceptionが発生しています。

変換した値:123
'Sample.exe' (CLR v4.0.30319: Sample.exe): 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。
例外がスローされました: 'System.FormatException' (mscorlib.dll の中)
入力文字列が数値ではない。

まとめ

この記事が皆様のお役に立てたら幸いです。

タイトルとURLをコピーしました