C#で文字列から数値に変換する方法について書いています。
文字列から数値にするには、Int16/Int32/Int64から下記のメソッドを使うことができます。
・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メソッドで変換できたかもチェックしましょう。
コメント