| |
|
.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編)」で解説している
カテゴリ:クラス・ライブラリ 処理対象:文字列
使用ライブラリ:Int32構造体(System名前空間)
使用ライブラリ:NumberStyles列挙体(System.Globalization名前空間)
使用ライブラリ:Convertクラス(System名前空間)
関連TIPS:文字列を数値に変換するには?(TryParse編) |
| 更新履歴 |
| 【2008/07/17】VB(Visual Basic)のコード例とサンプル・プログラムを追加しました。 |
|
|
|
generated by
|
|
TechTargetジャパン
キャリアアップ