【C#入門】文字列を数値に、数値を文字列に変換する方法

文字列の数値変換って使ってますか?文字列型で入力された値を数値に変換することで計算などに使用することができます。この記事では、文字列の数値変換について

  • 文字列を数値に変換する方法
  • 文字列を数値に変換できるか判定する方法

という基本的な内容から、

  • 数値を文字列に変換する方法
  • 16進数に変換する方法

など応用的な使い方の内容についても解説していきます。今回は文字列の数値変換について、使い方をわかりやすく解説します!

目次

文字列を数値に変換する方法

文字列を数値に変換するには、Parseメソッドを使う方法とConvertクラスを使う方法があります。

Parseメソッドを使う方法

c#ではint型やdouble型などそれぞれの数値型に対応した構造体があらかじめ用意されています。これらの構造体のParseメソッドを使って文字列形式から数値へ変換します。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      // int型に変換
      int i = int.Parse("123");
      Console.WriteLine(i);
      
      // long型に変換
      long l = long.Parse("123");
      Console.WriteLine(l);
      
      // float型に変換
      float f = float.Parse("123.456");
      Console.WriteLine(f);
      
      // double型に変換
      double d = double.Parse("123.456");
      Console.WriteLine(d);
      
      Console.ReadKey();
    }
  }
}

実行結果:

123
123
123.456
123.456

このサンプルコードでは、int、long、float、doubleそれぞれの構造体からParseメソッドを呼び出し、それぞれの型に変換しています。Parseメソッドは以下の場合に例外が発生するので、注意しましょう!

  • 引数にnullを指定した場合、ArgumentNullExceptionが発生
  • 引数の文字列が数値形式でない場合、FormatExceptionが発生
  • 引数の文字列の値が変換する型での値の範囲外の場合、OverflowExceptionが発生

スタイルを指定する方法

3桁区切りの文字列や指数表記でもスタイルを指定することでParseメソッドを使って変換することができます。Parseメソッドの第2引数でSystem.Globalization.NumberStylesの列挙子を指定します。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      // 桁区切りの文字列を数値に変換
      int num1 = int.Parse("123,456,789", System.Globalization.NumberStyles.AllowThousands);
      Console.WriteLine(num1);
      
      // 指数表記の文字列を数値に変換
      int num2 = int.Parse("123e4", System.Globalization.NumberStyles.AllowExponent);
      Console.WriteLine(num2);
      
      Console.ReadKey();
    }
  }
}

実行結果:

123456789
1230000

System.Globalization.NumberStylesの列挙子については、こちらで詳細を確認してくださいね。

引用元:Microsft https://msdn.microsoft.com/ja-jp/library/system.globalization.numberstyles(v=vs.110).aspx

Convertクラスを使う方法

c#ではConvertクラスを使って文字列を数値に変換することもできます。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      // int型に変換
      int i = Convert.ToInt32("123");
      Console.WriteLine(i);
      
      // long型に変換
      long l = Convert.ToInt64("123");
      Console.WriteLine(l);
      
      // float型に変換
      float f = Convert.ToSingle("123.456");
      Console.WriteLine(f);
      
      // double型に変換
      double d = Convert.ToDouble("123.456");
      Console.WriteLine(d);
      
      Console.ReadKey();
    }
  }
}

実行結果:

123
123
123.456
123.456

Convertクラスを使っても以下の場合に例外が発生するので、注意しましょう!

  • 引数の文字列が数値形式でない場合に、FormatExceptionが発生。
  • 引数の文字列の値が変換する型での値の範囲外の場合に、OverflowExceptionが発生。

文字列を数値に変換できるか判定する方法

ParseメソッドやConvertクラスを使って文字列を数値に変換するときに、文字列が数値形式でない場合は例外が発生します。例外処理を記述するか、TryParseメソッドを使って変換できるか判定してから変換するようにしましょう。

TryParseメソッドを使う場合

Parseメソッドと同じように、int型やdouble型などそれぞれの数値型に対応した構造体からTryParseメソッドを呼び出し数値へ変換できるか判定します。TryParseメソッドは以下のように定義されています。

public static bool TryParse(
    string s,
    out データ型名 result
)

引数sには、変換する文字列を指定します。引数resultには、変換が成功した場合の数値を格納します。変換に成功した場合はtrueを、失敗した場合にはfalseを返します。

サンプルコードで確認しましょう。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      // int型に変換
      int i;
      if(int.TryParse("123", out i)) {
        Console.WriteLine(i);
      } else {
        Console.WriteLine("数値に変換できません");
      }
      
      // long型に変換
      long l;
      if(long.TryParse("123", out l)) {
        Console.WriteLine(l);
      } else {
        Console.WriteLine("数値に変換できません");
      }
      
      // float型に変換
      float f;
      if(float.TryParse("123.456", out f)) {
        Console.WriteLine(f);
      } else {
        Console.WriteLine("数値に変換できません");
      }
      
      // double型に変換
      double d;
      if(double.TryParse("123.456", out d)) {
        Console.WriteLine(d);
      } else {
        Console.WriteLine("数値に変換できません");
      }
      
      Console.ReadKey();
    }
  }
}

実行結果:

123
123
123.456
123.456

例外処理を記述する場合

Parseメソッドを使う場合に例外処理を記述すると次のようになります。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      // int型に変換
      int i; 
      try {
        i = int.Parse("abc");
        Console.WriteLine(i);
      } catch(SystemException e) {
        Console.WriteLine(e.Message);
      }
      
      // double型に変換
      double d;
      try {
        d = double.Parse("123.456");
        Console.WriteLine(d);
      } catch(SystemException e) {
        Console.WriteLine(e.Message);
      }
      
      Console.ReadKey();
    }
  }
}

実行結果:

Input string was not in a correct format.
123.456

このサンプルコードでは、int.Parseメソッドを使う場合に引数にアルファベットの文字列”abc”を指定しているので、エラーが発生し例外処理を行っています。

数値を文字列に変換する方法

ここでは、数値を文字列に変換する方法についてみていきましょう。数値を文字列に変換するには、ToStringメソッドを使います。

IntやDoubleなどの構造体からToStringメソッドを呼び出す方法とConvertクラスからToStringメソッドを呼び出す方法の2種類があります。ちなみに構造体から呼び出すToStringメソッドはObjectクラスのToStringメソッドをオーバーライドして使われています。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      int num = 255;
      
      // int.ToStringメソッドを使う方法
      Console.WriteLine(num.ToString());
      
      // Convert.ToStringメソッドを使う方法 
      Console.WriteLine(Convert.ToString(num));
      
      Console.ReadKey();
    }
  }
}

実行結果:

255
255

書式を指定する方法

構造体からToStringメソッドを呼び出す場合は書式を指定して文字列に変換することができます。

ここではゼロ埋めの例をご紹介します。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      int num = 255;
      
      // int.ToStringメソッドを使う方法
      Console.WriteLine(num.ToString("0000"));
      
      Console.ReadKey();
    }
  }
}

実行結果:

0255

小数点以下の桁数を指定する方法

構造体から呼び出すToStringメソッドの書式指定で小数点以下の桁数を指定することもできます。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      double num = 123.456789;
      
      // double.ToStringメソッドを使う方法
      Console.WriteLine(num.ToString("0.00"));
      
      Console.ReadKey();
    }
  }
}

実行結果:

123.46

ToStringメソッドで書式を設定して文字列に変換する方法については、こちらで詳しく解説しています。

ぜひ参考にしてください。

16進数に変換する方法

16進数の文字列を整数に変換する方法と、逆に整数を16進数に変換する方法についてみていきましょう。

16進数の文字列を整数に変換

構造体のParseメソッドやConvertクラスのToInt32メソッドなどを使って整数に変換することが可能です。

構造体のParseメソッドを使う場合、第2引数のSystem.Globalization.NumberStylesの列挙子をHexNumberで指定します。ConvertクラスのToInt32メソッドを使う場合は、第2引数を数値16で指定します。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      // int.Parseメソッドを使う方法
      int num1 = int.Parse("00FF", System.Globalization.NumberStyles.HexNumber);
      Console.WriteLine(num1);
      
      // Convert.ToInt32メソッドを使う方法 
      int num2 = Convert.ToInt32("00FF", 16);
      Console.WriteLine(num2);
      
      Console.ReadKey();
    }
  }
}

実行結果:

255
255

整数を16進数の文字列に変換

IntやDoubleなどの構造体からToStringメソッドを呼び出す方法とConvertクラスからToStringメソッドを呼び出す方法があります。構造体のToStringメソッドを使う場合は、ToStringメソッドの引数に16進数を表す”X”を指定します。

ConvertクラスのToStringメソッドを使う場合は、第2引数を数値16で指定します。

using System;

namespace Sample
{
  class Sample
  {
    static void Main()
    {
      int num = 255;
      
      // int.ToStringメソッドを使う方法
      Console.WriteLine(num.ToString("X"));
      
      // Convert.ToStringメソッドを使う方法 
      Console.WriteLine(Convert.ToString(num, 16));
      
      Console.ReadKey();
    }
  }
}

実行結果:

FF
ff

まとめ

ここでは、文字列の数値変換について説明しました。文字列を数値に変換して計算に使ったり、逆に数値を文字列に変換する必要がある場合はたくさんあります。使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次