データ型変換関数 (Visual Basic)
これらの関数は、インラインでコンパイルされます。つまり、変換コードは、式を評価するコードに含まれます。 変換を実行するためのプロシージャの呼び出しがないことがありますが、これにより、パフォーマンスが向上します。 各関数では、式を特定のデータ型に強制的に変換します。
構文
CBool(expression)
CByte(expression)
CChar(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CObj(expression)
CSByte(expression)
CShort(expression)
CSng(expression)
CStr(expression)
CUInt(expression)
CULng(expression)
CUShort(expression)
パーツ
expression
必須です。 ソース データ型の任意の式。
戻り値のデータ型
次の表に示すように、関数名によって、それが返す値のデータ型が決まります。
関数名 | 戻り値のデータ型 | expression 引数の範囲 |
---|---|---|
CBool |
Boolean データ型 | 任意の有効な Char または String または数値式。 |
CByte |
Byte データ型 | Byte.MinValue (0) から Byte.MaxValue (255) (符号なし)。小数部は丸められます。1 Visual Basic 15.8 以降、Visual Basic では、 CByte 関数による浮動小数点からバイトへの変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。 |
CChar |
Char データ型 | 任意の有効な Char または String 式。String の最初の文字のみが変換されます。値には 0 から 65535 (符号なし) を指定できます。 |
CDate |
Date データ型 | 日付と時刻の任意の有効な表現。 |
CDbl |
Double 型 | 負の値の場合は -1.79769313486231570E+308 から -4.94065645841246544E-324 for negative values。正の値の場合は 4.94065645841246544E-324 から 1.79769313486231570E+308。 |
CDec |
Decimal データ型 | ゼロスケールの数値 (つまり、小数点以下を含まない数値) の場合は +/-79,228,162,514,264,337,593,543,950,335。 小数点以下 28 桁の数値の場合の範囲は +/-7.9228162514264337593543950335 です。 0 以外の最小値は 0.0000000000000000000000000001 (+/-1E-28) です。 |
CInt |
Integer データ型 | Int32.MinValue (-2147483648) から Int32.MaxValue (2147483647)。小数部は丸められます。1 Visual Basic 15.8 以降、Visual Basic では、 CInt 関数による浮動小数点から整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。 |
CLng |
Long データ型 | Int64.MinValue (-9,223,372,036,854,775,808) から Int64.MaxValue (9,223,372,036,854,775,807)。小数部は丸められます。1 Visual Basic 15.8 以降、Visual Basic では、 CLng 関数による浮動小数点から 64 ビット整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。 |
CObj |
Object 型 | 任意の有効な式。 |
CSByte |
SByte データ型 | SByte.MinValue (-128) から SByte.MaxValue (127)。小数部は丸められます。1 Visual Basic 15.8 以降、Visual Basic では、 CSByte 関数による浮動小数点から符号付きバイトへの変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。 |
CShort |
Short データ型 | Int16.MinValue (-32,768) から Int16.MaxValue (32,767)。小数部は丸められます。1 Visual Basic 15.8 以降、Visual Basic では、 CShort 関数による浮動小数点から 16 ビット整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。 |
CSng |
Single データ型 | 負の値の場合は、-3.402823E+38 から -1.401298E-45。正の値の場合は、1.401298E-45 から 3.402823E+38。 |
CStr |
String データ型 | CStr の戻り値は、expression 引数によって異なります。 「CStr 関数の戻り値」を参照してください。 |
CUInt |
UInteger データ型 | UInt32.MinValue (0) から UInt32.MaxValue (4,294,967,295)。小数部は丸められます。1 Visual Basic 15.8 以降、Visual Basic では、 CUInt 関数による浮動小数点から符号なし整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。 |
CULng |
ULong データ型 | UInt64.MinValue (0) から UInt64.MaxValue (18,446,744,073,709,551,615)。小数部は丸められます。1 Visual Basic 15.8 以降、Visual Basic では、 CULng 関数による浮動小数点から符号なし長整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。 |
CUShort |
UShort データ型 | UInt16.MinValue (0) から UInt16.MaxValue (65,535) (符号なし)。小数部は丸められます。1 Visual Basic 15.8 以降、Visual Basic では、 CUShort 関数による浮動小数点から符号なし 16 ビット整数への変換のパフォーマンスが最適化されます。詳細については、「解説」セクションを参照してください。 例については、「CInt の例」セクションを参照してください。 |
1 小数部は、銀行型丸めと呼ばれる特殊な種類の丸めの対象となる場合があります。 詳細については、「解説」を参照してください。
Remarks
原則として、Convert クラスで、または個々の型の構造体またはクラスで、ToString()
などの .NET Framework メソッドに優先して、Visual Basic の型変換関数を使用する必要があります。 Visual Basic 関数は、Visual Basic コードとの最適な相互作用のために設計されており、さらにそれらによって、ソースコードが短くなり、読みやすくなります。 また、.NET Framework 変換メソッドでは、常に Visual Basic 関数と同じ結果が生成されるとは限りません。たとえば、Boolean
を Integer
に変換する場合などです。 詳細については、「データ型のトラブルシューティング」を参照してください。
Visual Basic 15.8 以降、次のメソッドによって返される Single または Double 値を、整数変換関数 (CByte
、CShort
、CInt
、CLng
、CSByte
、CUShort
、CUInt
、CULng
) のいずれかに渡す場合に、浮動小数点から整数への変換のパフォーマンスが最適化されます。
- Conversion.Fix(Double)
- Conversion.Fix(Object)
- Conversion.Fix(Single)
- Conversion.Int(Double)
- Conversion.Int(Object)
- Conversion.Int(Single)
- Math.Ceiling(Double)
- Math.Floor(Double)
- Math.Round(Double)
- Math.Truncate(Double)
この最適化によって、大量の整数変換を行うコードで、実行が最大 2 倍速くなります。 次の例では、それらの最適化された浮動小数点から整数への変換を示しています。
Dim s As Single = 173.7619
Dim d As Double = s
Dim i1 As Integer = CInt(Fix(s)) ' Result: 173
Dim b1 As Byte = CByte(Int(d)) ' Result: 173
Dim s1 AS Short = CShort(Math.Truncate(s)) ' Result: 173
Dim i2 As Integer = CInt(Math.Ceiling(d)) ' Result: 174
Dim i3 As Integer = CInt(Math.Round(s)) ' Result: 174
動作
強制型変換。 一般に、データ型変換関数を使用すると、操作の結果を、既定のデータ型ではなく、特定のデータ型に強制的に変換することができます。 たとえば、単精度、倍精度、または整数の算術演算が通常行われるところで、
CDec
を使用して、10 進数の算術演算を強制的に実行します。変換の失敗。 関数に渡された
expression
が、変換先のデータ型の範囲外である場合、OverflowException が発生します。小数部。 非整数値を整数型に変換する場合、整数変換関数 (
CByte
、CInt
、CLng
、CSByte
、CShort
、CUInt
、CULng
、およびCUShort
) で、小数部を削除し、値を最も近い整数に丸めます。小数部がちょうど 0.5 の場合、整数変換関数では、最も近い偶数の整数に丸められます。 たとえば、0.5 は 0 に丸められ、1.5 と 2.5 は両方とも 2 に丸められます。 これは、銀行型丸めと呼ばれることもあり、その目的は、そのような多数の数値を加算するときに累積する可能性があるバイアスを補正することです。
CInt
とCLng
は、Int 関数や Fix 関数とは異なり、数値の小数部を丸めるのではなく、切り捨てます。 さらに、Fix
とInt
は常に、渡された同じデータ型の値を返します。日付/時刻の変換。 IsDate 関数を使用して、値を日付と時刻に変換できるかどうかを判断します。
CDate
は、日付リテラルと時刻リテラルを認識しますが、数値は認識しません。 Visual Basic 6.0 のDate
値を Visual Basic 2005 以降のバージョンのDate
値に変換するには、DateTime.FromOADate メソッドを使用できます。ニュートラル日付/時刻値。 Date データ型には、常に日付と時刻の両方の情報が格納されます。 型変換の目的で、Visual Basic では、1/1/0001 (1 年の 1 月 1 日) を日付のニュートラル値、00:00:00 (午前 0 時) を時刻のニュートラル値と見なします。
Date
値を文字列に変換する場合、CStr
では、結果の文字列にニュートラル値が含まれません。 たとえば、#January 1, 0001 9:30:00#
を文字列に変換した場合、結果は "9:30:00 AM" になります。日付情報は含まれません。 ただし、日付情報は元のDate
値には引き続き存在しているため、DatePart 関数などの関数を使用して回復できます。カルチャの感度。 文字列に関連する型変換関数では、アプリケーションの現在のカルチャ設定に基づいて変換が実行されます。 たとえば、
CDate
では、システムのロケール設定に従って日付形式が認識されます。 ロケールの正しい順序で日、月、年を指定する必要があります。そうしないと、日付が正しく解釈されない場合があります。 "Wednesday" など、曜日の文字列が含まれている場合、長い日付形式は認識されません。ロケールによって指定された形式以外の形式で、値の文字列表現の変換を行う必要がある場合は、Visual Basic 型変換関数を使用できません。 これを行うには、その値の型の
ToString(IFormatProvider)
およびParse(String, IFormatProvider)
メソッドを使用します。 たとえば、文字列をDouble
に変換する場合は Double.Parse を使用し、Double
型の値を文字列に変換する場合は Double.ToString を使用します。
CType Function
CType 関数は、2 つ目の引数 typename
を受け取り、expression
を typename
に強制的に変換します。ここで typename
は、それに対して有効な変換が存在する任意のデータ型、構造体、クラス、またはインターフェイスなどです。
CType
と他の型変換キーワードとの比較については、「CType
」と「TryCast 演算子」を参照してください。
CBool の例
次の例では、CBool
関数を使用して、式を Boolean
値に変換しています。 式が 0 以外の値に評価される場合、CBool
では True
が返されます。それ以外の場合は False
が返されます。
Dim a, b, c As Integer
Dim check As Boolean
a = 5
b = 5
' The following line of code sets check to True.
check = CBool(a = b)
c = 0
' The following line of code sets check to False.
check = CBool(c)
CByte の例
次の例では、CByte
関数を使用して、式を Byte
に変換しています。
Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)
CChar の例
次の例では、CChar
関数を使用して、String
式の最初の文字を Char
型に変換しています。
Dim aString As String
Dim aChar As Char
' CChar converts only the first character of the string.
aString = "BCD"
' The following line of code sets aChar to "B".
aChar = CChar(aString)
CChar
の入力引数は、Char
または String
データ型である必要があります。 CChar
を使用して数値を文字に変換することはできません。これは CChar
では数値データ型を受け入れないためです。 次の例では、コード ポイント (文字コード) を表す数値を取得し、それを対応する文字に変換しています。 InputBox 関数を使用して、数字の文字列を取得し、CInt
を使用して、文字列を Integer
型に変換し、ChrW
を使用して、数値を Char
型に変換しています。
Dim someDigits As String
Dim codePoint As Integer
Dim thisChar As Char
someDigits = InputBox("Enter code point of character:")
codePoint = CInt(someDigits)
' The following line of code sets thisChar to the Char value of codePoint.
thisChar = ChrW(codePoint)
CDate の例
次の例では、CDate
関数を使用して、文字列を Date
値に変換しています。 一般に、日付と時刻を文字列としてハードコーディングする (この例に示すように) ことは推奨されません。 代わりに、#Feb 12、1969#、#4:45:23 PM# などの日付リテラルと時刻リテラルを使用します。
Dim aDateString, aTimeString As String
Dim aDate, aTime As Date
aDateString = "February 12, 1969"
aTimeString = "4:35:47 PM"
' The following line of code sets aDate to a Date value.
aDate = CDate(aDateString)
' The following line of code sets aTime to Date value.
aTime = CDate(aTimeString)
CDbl の例
Dim aDec As Decimal
Dim aDbl As Double
' The following line of code uses the literal type character D to make aDec a Decimal.
aDec = 234.456784D
' The following line of code sets aDbl to 1.9225456288E+1.
aDbl = CDbl(aDec * 8.2D * 0.01D)
CDec の例
次の例では、CDec
関数を使用して、数値を Decimal
に変換しています。
Dim aDouble As Double
Dim aDecimal As Decimal
aDouble = 10000000.0587
' The following line of code sets aDecimal to 10000000.0587.
aDecimal = CDec(aDouble)
CInt の例
次の例では、CInt
関数を使用して、値を Integer
に変換しています。
Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)
CLng の例
次の例では、CLng
関数を使用して、値を Long
に変換しています。
Dim aDbl1, aDbl2 As Double
Dim aLng1, aLng2 As Long
aDbl1 = 25427.45
aDbl2 = 25427.55
' The following line of code sets aLng1 to 25427.
aLng1 = CLng(aDbl1)
' The following line of code sets aLng2 to 25428.
aLng2 = CLng(aDbl2)
CObj の例
次の例では、CObj
関数を使用して、数値を Object
に変換しています。 Object
変数自体には、それに代入される Double
値を指す 4 バイトのポインターのみが格納されます。
Dim aDouble As Double
Dim anObject As Object
aDouble = 2.7182818284
' The following line of code sets anObject to a pointer to aDouble.
anObject = CObj(aDouble)
CSByte の例
次の例では、CSByte
関数を使用して、数値を SByte
に変換しています。
Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)
CShort の例
次の例では、CShort
関数を使用して、数値を Short
に変換しています。
Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)
CSng の例
次の例では、CSng
関数を使用して、値を Single
に変換しています。
Dim aDouble1, aDouble2 As Double
Dim aSingle1, aSingle2 As Single
aDouble1 = 75.3421105
aDouble2 = 75.3421567
' The following line of code sets aSingle1 to 75.34211.
aSingle1 = CSng(aDouble1)
' The following line of code sets aSingle2 to 75.34216.
aSingle2 = CSng(aDouble2)
CStr の例
次の例では、CStr
関数を使用して、数値を String
に変換しています。
Dim aDouble As Double
Dim aString As String
aDouble = 437.324
' The following line of code sets aString to "437.324".
aString = CStr(aDouble)
次の例では、CStr
関数を使用して、 Date
値を String
値に変換しています。
Dim aDate As Date
Dim aString As String
' The following line of code generates a COMPILER ERROR because of invalid format.
' aDate = #February 12, 1969 00:00:00#
' Date literals must be in the format #m/d/yyyy# or they are invalid.
' The following line of code sets the time component of aDate to midnight.
aDate = #2/12/1969#
' The following conversion suppresses the neutral time value of 00:00:00.
' The following line of code sets aString to "2/12/1969".
aString = CStr(aDate)
' The following line of code sets the time component of aDate to one second past midnight.
aDate = #2/12/1969 12:00:01 AM#
' The time component becomes part of the converted value.
' The following line of code sets aString to "2/12/1969 12:00:01 AM".
aString = CStr(aDate)
CStr
では常に、現在のロケールの標準の短い形式 ("6/15/2003 4:35:47 PM" など) で Date
値がレンダリングされます。 ただし CStr
では、日付の 1/1/0001 と時刻の 00:00:00 のニュートラル値が含まれません。
CStr
によって返される値の詳細については、「CStr 関数の戻り値」を参照してください。
CUInt の例
次の例では、CUInt
関数を使用して、数値を UInteger
に変換しています。
Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)
CULng の例
次の例では、CULng
関数を使用して、数値を ULong
に変換しています。
Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)
CUShort の例
次の例では、CUShort
関数を使用して、数値を UShort
に変換しています。
Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)
関連項目
.NET