Fonctions de conversion de types de données (Visual Basic)

Ces fonctions sont compilées inline, ce qui signifie que le code de conversion fait partie du code qui évalue l’expression. Parfois, il n’y a pas d’appel à une procédure pour effectuer la conversion, ce qui améliore les performances. Chaque fonction force une expression en un type de données spécifique.

Syntaxe

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)

Élément

expression
Obligatoire. Toute expression du type de données source.

Type de données de la valeur de retour

Le nom de la fonction détermine le type de données de la valeur qu’elle retourne, comme indiqué dans le tableau suivant.

Nom de la fonction Type de données de retour Plage pour l’argument expression
CBool Booléen (type de données) Toute expression Char ou String ou numérique valide.
CByte Octet (type de données) Byte.MinValue (0) à Byte.MaxValue (255) (non signé) ; les parties fractionnaires sont arrondies.1

À compter de Visual Basic 15.8, Visual Basic optimise les performances de la conversion de virgule flottante en octets avec la fonction CByte. Pour plus d’informations, consultez la section Remarques. Pour obtenir un exemple, consultez la section Exemple CInt.
CChar Caractères (type de données) Toute expression Char ou String valide ; seul le premier caractère d’un String est converti ; la valeur peut être comprise entre 0 et 65535 (non signé).
CDate Date (type de données) Toute représentation valide d’une date et d’une heure.
CDbl Double (type de données) -1.79769313486231570E +308 à -4.94065645841246544 E -324 pour les valeurs négatives ; 4.94065645841246544E-324 à 1.79769313486231570E+308 pour les valeurs positives.
CDec Décimal (type de données) +/-79 228 162 514 264 337 593 543 950 335 pour les nombres sans décimales. Pour les nombres avec 28 décimales, la plage est +/-7,9228162514264337593543950335. Le plus petit nombre non nul possible est 0.0000000000000000000000000001 (+/-1E-28).
CInt Integer (type de données) Int32.MinValue (-2 147 483 648) à Int32.MaxValue (2 147 483 647) ; les parties fractionnaires sont arrondies.1

À compter de Visual Basic 15.8, Visual Basic optimise les performances de la conversion de virgule flottante en entier avec la fonction CInt. Pour plus d’informations, consultez la section Remarques. Pour obtenir un exemple, consultez la section Exemple CInt.
CLng Long (type de données) Int64.MinValue (-9 223 372 036 854 775 808) à Int64.MaxValue (9 223 372 036 854 775 807) ; les parties fractionnaires sont arrondies.1

À compter de Visual Basic 15.8, Visual Basic optimise les performances de la conversion de virgule flottante en entier 64 bits avec la fonction CLng. Pour plus d’informations, consultez la section Remarques. Pour obtenir un exemple, consultez la section Exemple CInt.
CObj Object Data Type Toute expression valide.
CSByte SByte (type de données) SByte.MinValue (-128) à SByte.MaxValue (127) ; les parties fractionnaires sont arrondies.1

À compter de Visual Basic 15.8, Visual Basic optimise les performances de la conversion de virgule flottante en octet signé avec la fonction CSByte. Pour plus d’informations, consultez la section Remarques. Pour obtenir un exemple, consultez la section Exemple CInt.
CShort Court (type de données) Int16.MinValue (-32 768) à Int16.MaxValue (32 767) ; les parties fractionnaires sont arrondies.1

À compter de Visual Basic 15.8, Visual Basic optimise les performances de la conversion de virgule flottante en entier 16 bits avec la fonction CShort. Pour plus d’informations, consultez la section Remarques. Pour obtenir un exemple, consultez la section Exemple CInt.
CSng Single (type de données) -3.402823E +38 à -1.401298 E -45 pour les valeurs négatives ; 1,401298E-45 à 3,402823E+38 pour les valeurs positives.
CStr String (type de données) Le retour pour CStr dépend de l’argument expression. Consultez Valeurs de retour pour la fonction CStr.
CUInt UInteger (type de données) UInt32.MinValue (0) à UInt32.MaxValue (4 294 967 295) (non signé) ; les parties fractionnaires sont arrondies.1

À compter de Visual Basic 15.8, Visual Basic optimise les performances de la conversion de virgule flottante en entier non signé avec la fonction CUInt. Pour plus d’informations, consultez la section Remarques. Pour obtenir un exemple, consultez la section Exemple CInt.
CULng ULong (type de données) UInt64.MinValue (0) à UInt64.MaxValue (18 446 744 073 709 551 615) (non signé) ; les parties fractionnaires sont arrondies.1

À compter de Visual Basic 15.8, Visual Basic optimise les performances de la conversion de virgule flottante en entier long non signé avec la fonction CULng. Pour plus d’informations, consultez la section Remarques. Pour obtenir un exemple, consultez la section Exemple CInt.
CUShort UShort (type de données) UInt16.MinValue (0) à UInt16.MaxValue (65 535) (non signé) ; les parties fractionnaires sont arrondies.1

À compter de Visual Basic 15.8, Visual Basic optimise les performances de la conversion de virgule flottante en entier 16 bits non signé avec la fonction CUShort. Pour plus d’informations, consultez la section Remarques. Pour obtenir un exemple, consultez la section Exemple CInt.

1 Les parties fractionnaires peuvent être soumises à un type spécial d’arrondi appelé arrondi bancaire. Pour plus d’informations, consultez la section Remarques.

Notes

En règle générale, vous devez utiliser les fonctions de conversion de type Visual Basic en préférence pour les méthodes .NET Framework, comme ToString(), sur la classe Convert ou sur une structure ou une classe de type individuelle. Les fonctions Visual Basic sont conçues pour une interaction optimale avec le code Visual Basic, et elles rendent également votre code source plus court et facile à lire. En outre, les méthodes de conversion .NET Framework ne produisent pas toujours les mêmes résultats que les fonctions Visual Basic, par exemple lors de la conversion de Boolean en Integer. Pour plus d’informations, consultez Résolution des problèmes liés aux types de données.

À compter de Visual Basic 15.8, les performances de la conversion de virgule flottante en entier sont optimisées lorsque vous passez la valeur Single ou Double retournée par les méthodes suivantes à l’une des fonctions de conversion en entier (CByte, CShort, CInt, CLng, CSByte, CUShort, CUInt, CULng) :

Cette optimisation permet au code qui effectue un grand nombre de conversions d’entiers de s’exécuter jusqu’à deux fois plus vite. L’exemple suivant illustre ces conversions de virgule flottante en entier optimisées :

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

Comportement

  • Forçage de type. En général, vous pouvez utiliser les fonctions de conversion de type de données pour contraindre le résultat d’une opération à un type de données particulier plutôt qu’au type de données par défaut. Par exemple, utilisez CDec pour forcer l’arithmétique décimale dans les cas où l’arithmétique simple précision, double précision ou à entier se produit normalement.

  • Échec des conversions. Si le expression passé à la fonction se trouve en dehors de la plage du type de données vers lequel il doit être converti, une opération OverflowException se produit.

  • Parties fractionnaires. Lorsque vous convertissez une valeur non intégrale en type intégral, les fonctions de conversion d’entier (CByte, CInt, CLng, CSByte, CShort, CUInt, CULng et CUShort) suppriment la partie fractionnaire et arrondissent la valeur à l’entier le plus proche.

    Si la partie fractionnaire est exactement 0,5, les fonctions de conversion d’entier l’arrondissent à l’entier pair le plus proche. Par exemple, 0,5 est arrondi à 0, et 1,5 et 2,5 sont arrondis à 2. C’est parfois ce qu’on appelle l’arrondi bancaire, et son objectif est de compenser le biais qui pourrait s’accumuler lors de l’addition d’un grand nombre de ces chiffres.

    CInt et CLng diffèrent des fonctions Int et Fix, qui tronquent, au lieu d’arrondir, la partie fractionnaire d’un nombre. En outre, Fix et Int retournent toujours une valeur du même type de données que vous transmettez.

  • Conversions de date/heure. Utilisez la fonction IsDate pour déterminer si une valeur peut être convertie en date et heure. CDate reconnaît les littéraux de date et d’heure, mais pas les valeurs numériques. Pour convertir une valeur Date Visual Basic 6.0 en valeur Date dans Visual Basic 2005 ou version ultérieure, vous pouvez utiliser la méthode DateTime.FromOADate.

  • Valeurs de date/heure neutres. Le type de données Date contient toujours des informations de date et d’heure. Pour la conversion de type, Visual Basic considère 1/1/0001 (1er janvier de l’année 1) comme une valeur neutre pour la date, et 00:00:00 (minuit) comme une valeur neutre pour l’heure. Si vous convertissez une valeur Date en chaîne, CStr n’inclut pas de valeurs neutres dans la chaîne résultante. Par exemple, si vous convertissez #January 1, 0001 9:30:00# en chaîne, le résultat est « 9:30:00 AM » ; les informations de date sont supprimées. Toutefois, les informations de date sont toujours présentes dans la valeur Date d’origine et peuvent être récupérées avec des fonctions, comme la fonction DatePart.

  • Sensibilité à la culture. Les fonctions de conversion de type impliquant des chaînes effectuent des conversions basées sur les paramètres de culture actuels de l’application. Par exemple, CDate reconnaît les formats de date en fonction des paramètres régionaux de votre système. Vous devez fournir le jour, le mois et l’année dans l’ordre correct pour vos paramètres régionaux, sinon la date peut ne pas être interprétée correctement. Un format de date longue n’est pas reconnu s’il contient une chaîne de jour de la semaine, comme « Mercredi ».

    Si vous devez effectuer une conversion vers ou à partir d’une représentation sous forme de chaîne d’une valeur dans un format autre que celui spécifié par vos paramètres régionaux, vous ne pouvez pas utiliser les fonctions de conversion de type Visual Basic. Pour ce faire, utilisez les méthodes ToString(IFormatProvider) et Parse(String, IFormatProvider) de ce type de valeur. Par exemple, utilisez Double.Parse lors de la conversion d’une chaîne en Double, et Double.ToString lors de la conversion d’une valeur de type Double en chaîne.

CType Function

La fonction CType prend un deuxième argument, typename, et force expression en typename, où typename peut être n’importe quel type de données, structure, classe ou interface pour lequel il existe une conversion valide.

Pour obtenir une comparaison de CType avec les autres mots clés de conversion de type, consultez Opérateur DirectCast et Opérateur TryCast.

Exemple CBool

L’exemple suivant utilise la fonction CBool pour convertir des expressions en valeurs Boolean. Si une expression est évaluée en valeur différente de zéro, CBool retourne True ; sinon, elle retourne 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)

Exemple CByte

L’exemple suivant utilise la fonction CByte pour convertir une expression en Byte.

Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)

Exemple CChar

L’exemple suivant utilise la fonction CChar pour convertir le premier caractère d’une expression String en type 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)

L’argument d’entrée à CChar doit être du type de données Char ou String. Vous ne pouvez pas utiliser CChar pour convertir un nombre en caractères, car CChar ne peut pas accepter un type de données numérique. L’exemple suivant obtient un nombre représentant un point de code (code caractère) et le convertit en caractère correspondant. Il utilise la fonction InputBox pour obtenir la chaîne de chiffres, CInt pour convertir la chaîne en type Integer, et ChrW pour convertir le nombre en type 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)

Exemple CDate

L’exemple suivant utilise la fonction CDate pour convertir des chaînes en valeurs Date. En général, le codage en dur des dates et des heures sous forme de chaînes (comme illustré dans cet exemple) n’est pas recommandé. Utilisez plutôt des littéraux de date et d’heure, comme #Feb 12, 1969# et #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)

Exemple 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)

Exemple CDec

L’exemple suivant utilise la fonction CDec pour convertir une valeur numérique en 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)

Exemple CInt

L’exemple suivant utilise la fonction CInt pour convertir une valeur en Integer.

Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)

Exemple CLng

L’exemple suivant utilise la fonction CLng pour convertir des valeurs en 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)

Exemple CObj

L’exemple suivant utilise la fonction CObj pour convertir une valeur numérique en Object. La variable Object elle-même ne contient qu’un pointeur de quatre octets, qui pointe vers la valeur Double qui lui est affectée.

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)

Exemple CSByte

L’exemple suivant utilise la fonction CSByte pour convertir une valeur numérique en SByte.

Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)

Exemple CShort

L’exemple suivant utilise la fonction CShort pour convertir une valeur numérique en Short.

Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)

Exemple CSng

L’exemple suivant utilise la fonction CSng pour convertir des valeurs en 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)

Exemple CStr

L’exemple suivant utilise la fonction CStr pour convertir une valeur numérique en 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)

L’exemple suivant utilise la fonction CStr pour convertir les valeurs Date en valeurs 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 affiche toujours une valeur Date au format court standard pour les paramètres régionaux actuels, par exemple « 6/15/2003 4:35:47 PM ». Toutefois, CStr supprime les valeurs neutres de 1/1/0001 pour la date et de 00:00:00 pour l’heure.

Pour plus d’informations sur les valeurs retournées par CStr, consultez Valeurs de retour pour la fonction CStr.

Exemple CUInt

L’exemple suivant utilise la fonction CUInt pour convertir une valeur numérique en UInteger.

Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)

Exemple CULng

L’exemple suivant utilise la fonction CULng pour convertir une valeur numérique en ULong.

Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)

Exemple CUShort

L’exemple suivant utilise la fonction CUShort pour convertir une valeur numérique en UShort.

Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)

Voir aussi