C#で文字列から数値に変換する2つの方法!

C# C#

C#で文字列から数値に変換する方法について書いています。
文字列から数値にするには、Int16/Int32/Int64から下記のメソッドを使うことができます。

・Parseメソッドを使う
・TryParseメソッドを使う

Parseメソッドを使う

文字列から数値を変換するときには、Parseメソッドを使うことができます。
例えば、下記のように使います。

short number1 = Int16.Parse("100");

Console.WriteLine(number1.GetType()); // System.Int16
Console.WriteLine(number1); // 100

最初にInt16からParseメソッドを呼び出して、文字列の「100」を数値を渡しました。
このようにParseメソッドに文字列の数値を渡すと変換されます。

結果をshort型のnumber1変数に格納しました。
GetTypeで型を出力すると、「System.Int16」と数値型になって、変換された「100」が出力されました。

Int32とInt64から使う

Int32とInt64からも同じようにParseメソッドを呼び出して使うことができます。
Int16から呼び出したときと同様に、下記のように使うことができます。

int number2 = Int32.Parse("150");

Console.WriteLine(number2.GetType()); // System.Int32
Console.WriteLine(number2); // 150

long number3 = Int64.Parse("250");

Console.WriteLine(number3.GetType()); // System.Int64
Console.WriteLine(number3); // 250

最初にInt32からParseメソッドを呼び出して、文字列「150」の数値を渡しました。
結果をint型のnumber2変数に格納しました。
型を確認すると「System.Int32」となって、変換された数値の「150」が出力されました。

同じようにInt64からParseメソッドを呼び出して、文字列「250」の数値を渡しました。
結果をlong型のnumber3変数に格納しました。
型を確認すると「System.Int64」となって、変換された数値の「250」が出力されました。

Int16, Int32, Int64はどう違うのか?

どれも数値を表す型ですが、下記のように表現できる数値の範囲が違うようです。
想定される数値の範囲で、使う型を決めましょう。

CLR 範囲
short System.Int16 -32,768 〜 32,767
int System.Int32 -2,147,483,648 〜 2,147,483,647
long System.Int64 -9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807

数値変換できないとエラーに

文字列から数値変換できない文字列を渡すとエラーになります。
例えば、下記のようなコードを実行します。

short number1 = Int16.Parse("hello");

そうすると、下記のSystem.FormatExceptionが発生します。
Unhandled exception. System.FormatException: Input string was not in a correct format.

文字列が指定されることが想定されるときには、次のTryParseメソッドを使うと良いです。

Parseの引数と戻り値まとめ

Parseの引数と戻り値をまとめました。

引数

変換したい文字列の数値を渡します。
変換できないときには、System.FormatException例外が発生しました。

short number2 = Int16.Parse("変換したい文字列の数値");

戻り値

変換した結果の数値が取得されます。

TryParseメソッドを使う

TryParseメソッドを使うことでも、文字列から数値を変換することができます。
例えば、下記のように使います。

short number1 = 0;

bool result = Int16.TryParse("111", out number1);
if (result) {
    Console.WriteLine(number1.GetType()); // System.Int16
    Console.WriteLine(number1); // 111
}

最初にshort型のnumber1変数に0を入れています。
次の処理で、Int16からTryParseメソッドを呼びました。

第1引数に変換したい文字列を渡して、第2引数にoutキーワードを付けて、変換後の数値を格納する変数を書きます。
返り値として、変換できたかどうかが返ってきます。
変換できたときにはTrue、変換できなかったときにはFalseが返ってきます。

result変数で、変換結果を受け取っています。
今回は変換できるので、Trueが返ってきて、if文の中が実行されました。
実行すると、下記のように型と変換後の数値が出力されました。

System.Int16
111

変換できないときもエラーが発生しない

Parseメソッドを使うと、エラーが発生しました。
TryParseを使うとエラーにならず、変換結果を返してくれました。

そのため、数値ではない文字列がくることが想定されるときには、こちらを使うと良さそうです。

Int32とInt64から使う

Int32とInt64からも同じように、TryParseメソッドを呼び出して使うことができます。

int number2 = 0;

bool result2 = Int32.TryParse("222", out number2);
if (result2) {
    Console.WriteLine(number2.GetType()); // System.Int32
    Console.WriteLine(number2); // 222
}

long number3 = 0;

bool result3 = Int64.TryParse("333", out number3);
if (result2) {
    Console.WriteLine(number3.GetType()); // System.Int64
    Console.WriteLine(number3); // 333
}

最初にnumber2変数をint型で用意しています。

そして、Int32からTryParseメソッドを呼び出して、文字列の「222」の数値を渡しました。
問題なく変換できるので、下記のように出力されます。

System.Int32
222

同じようにnumber3変数をlong型で用意しています。

Int64からTryParseメソッドを呼び出して、文字列の「333」の数値を渡しました。
問題なく変換できるので、下記のように出力されます。

System.Int64
333

TryParseの引数と戻り値まとめ

TryParseの引数と戻り値をまとめました。

引数

第1引数に変換したい文字列の数値を渡します。
第2引数に変換後の数値を格納する変数を渡します。

bool result = Int64.TryParse("変換したい数値", out [変換後の数値を受け取る変数]);

戻り値

変換ができたときにはTrueが返ってきて、失敗したときにはFalseが返ってきます。

終わりに

今回は、C#で文字列から数値に変換する方法について書きました。
数値の文字列しか指定しないことがわかっているときには、Parseメソッドを使っていくと良さそうです。
数値以外の文字列を指定することがありそうなときには、TryParseメソッドで変換できたかもチェックしましょう。

コメント

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