.NET TIPS

文字列を数値に変換するには?[C#、VB]

デジタルアドバンテージ 遠藤 孝信
2003/03/27
2008/07/17 更新

 テキスト・ボックスなどでユーザーが入力した文字列を数値に変換するには、各数値型で実装されているParseメソッドを使用する。

 例えば、文字列をint型(Int32型と同等。VBではInteger型)の数値に変換するには、以下のように記述する(「int.Parse」「Integer.Parse」は「Int32.Parse」と記述してもよい)。

string str = "123456789";
int num = int.Parse(str);
Dim str As String = "123456789"
Dim num As Integer = Integer.Parse(str)
Parseメソッドの使用例(上:C#、下:VB)

 次にParseメソッドを使用した、コンパイルして実行可能なサンプル・プログラムを示す。

// atoi1.cs

using System;

class ATOI1 {
  public static void Main() {

    string str = "123456789";
    int num = int.Parse(str);

    Console.WriteLine(num);
    // 出力:123456789

    //str = "1234567890987654321";
    //num = int.Parse(str);
    //
    //例外:System.OverflowExceptionが発生

    //str = "1,234,567,890";
    //num = int.Parse(str);
    //
    //例外:System.FormatExceptionが発生
  }
}
// コンパイル方法:csc atoi1.cs
文字列を数値に変換するC#のサンプル・プログラム(atoi1.cs)

' atoi1.vb

Imports System

Class ATOI1
  Public Shared Sub Main()

    Dim str As String = "123456789"
    Dim num As Integer = Integer.Parse(str)

    Console.WriteLine(num)
    ' 出力:123456789

    'str = "1234567890987654321"
    'num = Integer.Parse(str)
    '
    '例外:System.OverflowExceptionが発生

    'str = "1,234,567,890"
    'num = Integer.Parse(str)
    '
    '例外:System.FormatExceptionが発生
  End Sub
End Class
' コンパイル方法:vbc atoi1.vb
文字列を数値に変換するVBのサンプル・プログラム(atoi1.vb)

 サンプル・プログラム内のコメントでも示しているように、変換しようとする文字列が、変換する数値の最大値を超えている場合(int型の最大値は2,147,483,647)や、数値以外の文字を含んでいる場合には例外が発生する。

 ただしParseメソッドでは、文字列とNumberStyles列挙体(System.Globalization名前空間)の値の2つをパラメータにとるメソッドのバージョンを利用することにより、NumberStyles列挙体で指定したスタイルの文字列を数値に変換することができる。

string str = "123,456,789";
int num = int.Parse(str, NumberStyles.AllowThousands);
Dim str As String = "123,456,789"
Dim num As Integer = int.Parse(str, NumberStyles.AllowThousands)
指定したスタイルを持つ文字列の変換(上:C#、下:VB)

 上の例では、数値の桁区切り記号(日本語の環境ではカンマ)が文字列に含まれている場合でも、正しく数値に変換することができる。このバージョンのParseメソッドを利用したサンプル・プログラムを次に示す。

// atoi2.cs

using System;
using System.Globalization;

class ATOI2 {
  public static void Main() {

    string str = "123,456,789";
    int num = int.Parse(str, NumberStyles.AllowThousands);

    Console.WriteLine(num);
    // 出力:123456789

    str = "123e4";
    num = int.Parse(str, NumberStyles.AllowExponent);

    Console.WriteLine(num);
    // 出力:1230000
  }
}
// コンパイル方法:csc atoi2.cs
スタイルを指定した文字列を数値に変換するC#のサンプル・プログラム(atoi2.cs)

' atoi2.vb

Imports System
Imports System.Globalization

Class ATOI2
  Public Shared Sub Main()

    Dim str As String = "123,456,789"
    Dim num As Integer = Integer.Parse(str, NumberStyles.AllowThousands)

    Console.WriteLine(num)
    ' 出力:123456789

    str = "123e4"
    num = Integer.Parse(str, NumberStyles.AllowExponent)

    Console.WriteLine(num)
    ' 出力:1230000
  End Sub
End Class
' コンパイル方法:vbc atoi2.vb
スタイルを指定した文字列を数値に変換するC#のサンプル・プログラム(atoi2.vb)

 NumberStyles列挙体では、通貨記号や桁区切り記号、小数点記号などを示すスタイル(および複数のスタイルを組み合わせたスタイル)が定義されている。ただし、実際に使用されるこれらの記号は、コードを実行する環境によって異なる。

 上記のサンプル・プログラムは、日本や韓国のWindows環境では実行できるが、例えば、桁区切り記号としてピリオドを使用するドイツの環境ではSystem.FormatException例外が発生するはずだ。これらの記号の設定は、コントロール・パネルにある[地域と言語のオプション]の[地域オプション]タブで変更することができる。


[地域と言語のオプション]の[地域オプション]タブ
ここで通貨記号や区切り記号などを設定できる。

Convertクラスによる変換

 基本的なデータ型の変換は、Convertクラス(System名前空間)のメソッドを利用しても可能だ。例えば、文字列をInt32型の数値に変換するには以下のように記述する。

string str = "123456789";
int num = Convert.ToInt32(str);
Dim str As String = "123456789"
Dim num As Integer = Convert.ToInt32(str)
Convertクラスの使用例(上:C#、下:VB)

 Convertクラスを利用した実行可能なサンプル・プログラムを次に示す。

// atoi3.cs

using System;

class ATOI3 {
  public static void Main() {

    string str = "123456789";
    int num = Convert.ToInt32(str);

    Console.WriteLine(num);
    // 出力:123456789

    str = Convert.ToString(num);

    Console.WriteLine(num);
    // 出力:123456789

    //str = "1,234,567,890";
    //num = Convert.ToInt32(str);
    //
    //例外:System.FormatExceptionが発生
  }
}
// コンパイル方法:csc atoi3.cs
Convertクラスにより文字列を数値に変換するC#のサンプル・プログラム(atoi3.cs)

' atoi3.vb

Imports System

Class ATOI3
  Public Shared Sub Main()

    Dim str As String = "123456789"
    Dim num As Integer = Convert.ToInt32(str)

    Console.WriteLine(num)
    ' 出力:123456789

    str = Convert.ToString(num)

    Console.WriteLine(num)
    ' 出力:123456789

    'str = "1,234,567,890"
    'num = Convert.ToInt32(str)
    '
    '例外:System.FormatExceptionが発生
  End Sub
End Class
' コンパイル方法:vbc atoi3.vb
Convertクラスにより文字列を数値に変換するVBのサンプル・プログラム(atoi3.vb)

 Convertクラスが変換をサポートする型には次のようなものがある。各メソッドについては、オーバーライドにより、ほとんどの基本的なデータ型をパラメータとして受け取ることができる。

メソッド 変換後の値
ToBoolean ブール値
ToByte 8ビット符号なし整数
ToChar Unicode文字
ToDateTime DateTime型の日時
ToDecimal Decimal型(10進数)の数値
ToDouble 倍精度浮動小数点数
ToInt16 16ビット符号付き整数
ToInt32 32ビット符号付き整数
ToInt64 64ビット符号付き整数
ToSByte 8ビット符号付き整数
ToSingle 単精度浮動小数点数
ToString 文字列
ToUInt16 16ビット符号なし整数
ToUInt32 32ビット符号なし整数
ToUInt64 64ビット符号なし整数
Convertクラスのメソッドとその戻り値の型

 このように、Convertクラスはデータ型を変換するメソッドばかりを集めたクラスだ。ただし、MSDNにも記されているように、例えば、Convert.ToInt32メソッドはその内部でInt32.Parseメソッドを呼び出している。

 なお.NET Framework 2.0以降では、Int32型などにTryParseメソッドが新しく追加されており、このメソッドを使えば、失敗しても例外を発生させずに、文字列を数値に変換できる。このメソッドについては、「文字列を数値に変換するには?(TryParse編)」で解説しているEnd of Article

カテゴリ:クラス・ライブラリ 処理対象:文字列
使用ライブラリ:Int32構造体(System名前空間)
使用ライブラリ:NumberStyles列挙体(System.Globalization名前空間)
使用ライブラリ:Convertクラス(System名前空間)
関連TIPS:文字列を数値に変換するには?(TryParse編)

更新履歴
【2008/07/17】VB(Visual Basic)のコード例とサンプル・プログラムを追加しました。

この記事と関連性の高い別の.NET TIPS
文字列を数値に変換するには?(TryParse編)
数値を3けた区切りの文字列に変換するには?
文字と文字列を変換するには?
バイト列と数値を変換するには?
数値←→3〜36進数文字列を相互に変換するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ


- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る
- PR -

ホワイトペーパーTechTargetジャパン

ソリューションFLASH

「ITmedia マーケティング」新着記事

TAGGY、中小ECショップ向けレコメンド広告「おもてなしバナー for FutureShop2」の提供を開始
ディスプレイ広告の最適化サービスを手掛けるTAGGYは12月19日、フューチャーショップのAS...

見えない顧客を育てるプラットフォーム、トライアックスが開発
トライアックスは12月18日、中長期の顧客育成を支援するコミュニケーション マネジメント...

ハイブリス、小売業オムニチャネルに関する調査結果を発表
コマース・プラットフォーム・プロバイダである独ハイブリスソフトウェア(an SAP Compan...