文字列を数値に変換する、数値を文字列に変換する
注意:キャストに関する説明は、「ある型の値を別の型に変換(キャスト)する」に移動しました。また、書式を指定して文字列に変換する方法は、「書式を指定して数値を文字列に変換する」で説明しています。
Parseメソッドを使って、文字列を数値に変換するまずは、文字列(String型)を数値(Integer、Long、Single、Double型など)に変換する基本的な方法を紹介します。 大抵の場合、Parseメソッドを使うことにより、簡単に変換できます。 '文字列をInteger型に変換 Dim i As Integer = Integer.Parse("100") '文字列をLong型に変換 Dim l As Long = Long.Parse("100") '文字列をSingle型に変換 Dim f As Single = Single.Parse("100.1") '文字列をDouble型に変換 Dim d As Double = Double.Parse("100.1") '文字列をBoolean型に変換 Dim b As Boolean = Boolean.Parse("True") //文字列をint型に変換 int i = int.Parse("100"); //文字列をlong型に変換 long l = long.Parse("100"); //文字列をfloat型に変換 float f = float.Parse("100.1"); //文字列をdouble型に変換 double d = double.Parse("100.1"); //文字列をbool型に変換 bool b = bool.Parse("True"); 変換に失敗した時は、例外がスローされます。文字列が有効な書式でない時はFormatExceptionが、オーバーフローが発生したときはOverflowExceptionがスローされます。 事前に文字列を数値に変換することができるか確かめるには、「文字列が数値に変換できるか調べる」で紹介している方法を使います。 使用できる記号(スタイル)や、カルチャを変更するほとんどの場合は上記の方法で十分だとは思いますが、文字列に使用できる記号の定義やカルチャを変更して変換することもできます。そのためには、Parseメソッドの2番目のパラメータに使用できる記号の定義(スタイル)を示すNumberStyles列挙体の値と、3番目のパラメータにカルチャを示すIFormatProviderオブジェクト(通常はNumberFormatInfoまたはCultureInfoオブジェクト)を指定します(NumberStylesを指定せずにIFormatProviderのみを指定する時は、2番目のパラメータにIFormatProviderを指定します)。 NumberStyles列挙体の値を表にまとめると、以下のようになります(説明は、MSDNからの引用)。説明の欄に書かれている「NumberFormatInfo」というのは、3番目のパラメータに指定するNumberFormatInfoオブジェクト(または、CultureInfoオブジェクトのNumberFormatプロパティ)のことです。なお補足の欄には、NumberStylesを指定しなかったときに使われる値も記述しておきました。
カルチャは、デフォルトでは、現在のカルチャが使われます。 以下にスタイルとカルチャを変更して文字列をDouble値に変換する例を示します。 Dim str As String = "$100" 'en-US のCultureInfoオブジェクトを作成 Dim ci As New System.Globalization.CultureInfo("en-US") 'スタイルとカルチャを変更して変換する Dim d As Double = Double.Parse(str, System.Globalization.NumberStyles.Any, ci) string str = "$100"; //en-US のCultureInfoオブジェクトを作成 System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US"); //スタイルとカルチャを変更して変換する double d = double.Parse(str, System.Globalization.NumberStyles.Any, ci); 数値を文字列に変換する数値を文字列に変換するには、ToStringメソッドを使用します。 Dim s As String 'Integer型を文字列に変換 Dim i As Integer = 100 s = i.ToString() 'Long型を文字列に変換 Dim l As Long = 100L s = l.ToString() 'Single型を文字列に変換 Dim f As Single = 100.1F s = f.ToString() 'Double型を文字列に変換 Dim d As Double = 100.1 s = d.ToString() 'Boolean型を文字列に変換 'sは"True"となる Dim b As Boolean = True s = b.ToString() string s; //int型を文字列に変換 int i = 100; s = i.ToString(); //long型を文字列に変換 long l = 100L; s = l.ToString(); //float型を文字列に変換 float f = 100.1F; s = f.ToString(); //double型を文字列に変換 double d = 100.1; s = d.ToString(); //bool型を文字列に変換 //sは"True"となる bool b = true; s = b.ToString(); ToStringメソッドは、書式を指定して文字列に変換することもできます。その方法は、「書式を指定して数値を文字列に変換する」で説明しています。 Convertクラスによるデータ型の変換全般的なデータ型の変換には、Convertクラスを使っても行えます。次にConvertクラスを使った簡単な変換例を示します。 Dim s As String Dim i As Integer = 100 'Integer型を文字列に変換 s = Convert.ToString(i) '文字列をInteger型に変換 i = Convert.ToInt32(s) Dim d As Double = 1.23 'Double型を文字列に変換 s = Convert.ToString(d) '文字列をDouble型に変換 d = Convert.ToDouble(s) Dim m As Decimal = 100 'Decimal型を文字列に変換 s = Convert.ToString(m) '文字列をDecimal型に変換 m = Convert.ToDecimal(s) string s; int i = 100; //int型を文字列に変換 s = Convert.ToString(i); //文字列をint型に変換 i = Convert.ToInt32(s); double d = 1.23; //double型を文字列に変換 s = Convert.ToString(d); //文字列をdouble型に変換 d = Convert.ToDouble(s); decimal m = 100; //decimal型を文字列に変換 s = Convert.ToString(m); //文字列をdecimal型に変換 m = Convert.ToDecimal(s); VB.NETのデータ型変換関数による変換VB.NETでは、CStr関数やCInt関数などのデータ型変換関数を使うことで、文字列と数値の変換を行うことができます。VB.NETでは、これらの関数を使うと、パフォーマンスが向上することがあります。 また、Val関数で文字列を数値に、Str関数やFormat関数で数値を文字列に変換することもできます。 これらの関数について詳しくは、MSDNの「データ型変換関数」や「変換関数 (Visual Basic)」をご覧ください。 Dim s As String Dim i As Integer = 100 'Integer型を文字列に変換 s = CStr(i) '文字列をInteger型に変換 i = CInt(s) また、CType関数を使っても同様の変換ができます。 Dim s As String Dim i As Integer = 100 'Integer型を文字列に変換 s = CType(i, String) '文字列をInteger型に変換 i = CType(s, Integer) VB.NETでは、Option StrictステートメントがOffのとき、これらのメソッドや関数を全く使わないで、暗黙的に変換を行うこともできます。ただしこのような方法はお勧めできません。 Parse、ToStringメソッドとConvertクラスの違いオブジェクトのParseまたはToStringメソッドを使って変換する方法と、Convertクラスの静的メソッドを使って変換する方法の一番の違いは、null(VB.NETではNothing)を変換できるか、できないかです。まずは次の例をご覧ください。 Dim str As String = Nothing 'Convert.ToInt32メソッドを使う '結果は、0となる Dim i1 As Integer = Convert.ToInt32(str) 'int.Parseメソッドを使う 'ArgumentNullExceptionがスローされる Dim i2 As Integer = Integer.Parse(str) string str = null; //Convert.ToInt32メソッドを使う //結果は、0となる int i1 = Convert.ToInt32(str); //int.Parseメソッドを使う //ArgumentNullExceptionがスローされる int i2 = int.Parse(str); このようにnull(VB.NETではNothing)をConvert.ToInt32メソッドに渡してもエラーとならずに0を返しますが、int.Parseメソッドにnullを渡すと例外ArgumentNullExceptionがスローされて失敗します。 nullを文字列に変換する例も見てみましょう。 Dim obj As Object = Nothing 'Convert.ToStringメソッドを使う '結果は、空の文字列となる Dim str1 As String = Convert.ToString(obj) 'Object.ToStringメソッドを使う 'NullReferenceExceptionがスローされる Dim str2 As String = obj.ToString() object obj = null; //Convert.ToStringメソッドを使う //結果は、空の文字列となる string str1 = Convert.ToString(obj); //Object.ToStringメソッドを使う //NullReferenceExceptionがスローされる string str2 = obj.ToString(); Convert.ToStringメソッドはnullを渡してもエラーを出さずに空の文字列を返します。Object.ToStringメソッドの場合は言うまでも無く、エラーが発生します。 このように、nullを変換しようとしてもエラーが出ないようにしたいのであれば、Convertクラスのメソッドを使うのが良いでしょう。
補足:VB.NETでデータ型変換関数を使ってNothingを変換したときもConvertと同じように、例外をスローしないようです。
|
|
Copyright(C) DOBON!. All rights reserved.
|